mod_rewrite - 添加www

时间:2011-09-21 00:10:14

标签: apache .htaccess mod-rewrite

我正在尝试使用www强制.htaccess我的网站地址:

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子域。

3 个答案:

答案 0 :(得分: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>

答案 1 :(得分:14)

问题就在这里:

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

^指定字符串的开头,而$指定结尾。

为了使其正常工作,您需要在.com或.+之后选择通配符。

重申Alex所说的话:

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

答案 2 :(得分: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'且没有子域,则上述代码仅重定向。

希望这有助于其他人。