2011-05-24 114 views
0

我正在尋找一種方法來將非www域重寫爲www域,同時不重定向直接IP請求。重定向非www域但不是IP

我在同一臺服務器上有多個站點 - 即:一個默認(虛擬)主機和一個帶有ServerName和多個ServerAlias'es的VirtualHost,它們完美地工作。我更喜歡域名以「www」開頭。所以我砍死下面的代碼放在一起,偉大的工程:

RewriteCond %{HTTP_HOST} !^www\. [NC] 
RewriteRule^http://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301] 

它不處理HTTPS,但最大的問題是,請求到服務器的IP也從如重寫。 「123.45.67.8」到「www.123.45.67.8」。我可以添加下面的行來解決這個問題:

RewriteCond %{HTTP_HOST} !^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$ 

...但它是否有效?那IPv6呢?

不是mod_rewrite-wiz,我一直在想弄清楚別人怎麼解決這個問題,但是沒有運氣。

回答

1

那是因爲你的條件是隻檢查是否以www開始,試試這個,而不是(我離開了可選的HTTPS代碼):

RewriteCond %{HTTP_HOST} ^(yourdomain|thisdomain|thatdomain)\.com 
#RewriteCond %{HTTPS} =on 
#RewriteRule .* https://www.%{SERVER_NAME}%{REQUEST_URI} [R,L] 
RewriteRule .* http://www.%{SERVER_NAME}%{REQUEST_URI} [R,L]