2011-09-21 58 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