2011-09-21 19 views
10

我試圖迫使www我的網站地址與.htaccessmod_rewrite的 - 加上www

RewriteCond %{HTTP_HOST} ^mysite\.com$ [NC] 
RewriteRule ^(.*)$ http://www.mysite.coml/$1 [R=301,L] 

如果我打開mysite.com這個確定的工作 - 它增加了www。它變成http://www.mysite.com/index.php

但是,如果我打開mysite.com/subpage我再次重定向到http://www.mysite.com/index.php而不是http://www.mysite.com/subpage

但是,如果我打開http://www.mysite.com/subpage我沒有得到重定向(這是預期的行爲)。

我該如何解決這個問題?我想將所有請求重定向到我的網站到www子域。

回答

12

的問題就在這裏:

RewriteCond %{HTTP_HOST} ^mysite\.com$ [NC] 

^指定字符串的開頭,而$指定結束。

爲了使其正常工作,您需要在.com或.+之後選擇通配符。

重申什麼亞歷克斯說:

<IfModule mod_rewrite.c> 
    RewriteCond %{HTTPS} !=on 
    RewriteCond %{HTTP_HOST} !^www\..+$ [NC] 
    RewriteRule^http://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L] 
</IfModule> 
17

從精湛的HTML5 Boilerplate .htaccess

<IfModule mod_rewrite.c> 
    RewriteCond %{HTTPS} !=on 
    RewriteCond %{HTTP_HOST} !^www\..+$ [NC] 
    RewriteRule^http://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L] 
</IfModule> 
6

其實,我有Szanto先生不同意。

這樣看來,這個問題是不是與:

RewriteCond %{HTTP_HOST} ^mysite\.com$ [NC] 

通過一些額外的研究(通過谷歌),我發現,這對我來說真是棒極了:

<IfModule mod_rewrite.c> 
    RewriteCond %{HTTPS} !=on 
    RewriteCond %{HTTP_HOST} ^mysite\.com$ [NC] 
    RewriteRule^http://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L] 
</IfModule> 

Szanto先生的回答,雖然格式良好,似乎將缺少'www'的所有請求重定向爲與所附的'www'重定向。對於大多數子域來說,這不是一個理想的結果。如果在TL域名之前沒有'www'且沒有子域名,上述代碼只會重定向。

希望這可以幫助別人。

+0

我喜歡上面的回答最多 - 任何人使用子域必須更具體,不要無謂地追加www(和不正確)。 – Debriter