2010-01-06 159 views
14

我想有:htaccess的重定向非www HTTP和HTTPS

  • http://example.com重定向到:http://www.example.com
  • https://example.com重定向到:https://www.example.com

和任何爲http://whatever.example.com不要像http://www.whatever.example.com那樣追加www。

回答

35

試試這個規則:

RewriteCond %{HTTP_HOST} ^[^.]+\.[^.]+$ 
RewriteCond %{HTTPS}s ^on(s)| 
RewriteRule^http%1://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301] 

這裏有一個解釋:

  1. 第一個條件測試,如果HTTP報頭字段主機有要求的格式(只包含一個週期)。如果
  2. 第二條件測試HTTPS變量的值的連接的值(值onoff)和s(因此無論onsoffs)等於ons並且捕獲s。這意味着如果%{HTTPS}s的計算結果爲ons,則第一個匹配組爲s,否則爲空。
  3. 該規則將匹配所有請求,因爲每個字符串都有一個開始(標記爲^),並將它們重定向到評估值http%1://www.%{HTTP_HOST}%{REQUEST_URI},如果兩個條件都爲真。其中%1是先前條件的第一個匹配組(如果HTTPS爲s,否則爲空),%{HTTP_HOST}是請求的HTTP 主機%{REQUEST_URI}是請求的絕對URL路徑。
+0

你能解釋一下嗎?對我而言,這是一種中國人......第一行是隻捕捉兩部分的主機(如:example.com)。第二行的功能如何? – 2010-01-06 18:17:22

+0

看起來不錯,但正在爲我生成500條內部錯誤消息。 – TRiG 2011-05-12 09:54:51

+0

@TRiG:請參考服務器的錯誤日誌。 – Gumbo 2011-05-12 10:01:10

2

嘗試將此RewriteCond添加到您的.htaccess文件中,以僅捕獲SSL - 然後爲標準http執行相同的操作。

RewriteCond %{HTTPS} on 
相關問題