我正在尝试使用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
子域。
答案 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'且没有子域,则上述代码仅重定向。
希望这有助于其他人。