我试图强制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
我将redirect到http://www.mysite.com/index.php
,而不是http://www.mysite.com/subpage
。
但是,如果我打开http://www.mysite.com/subpage
我不会得到redirect(这是预期的行为)。
我怎样才能解决这个问题? 我想将所有请求redirect到我的网站www
子域。
问题就在这里:
RewriteCond %{HTTP_HOST} ^mysite\.com$ [NC]
^
指定字符串的开始,而$
指定结束。
为了使其工作,您需要在.com或.+
之后选择通配符。
重申Alex的话:
<Ifmodulee mod_rewrite.c> RewriteCond %{HTTPS} !=on RewriteCond %{HTTP_HOST} !^www\..+$ [NC] RewriteRule ^ http://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L] </Ifmodulee>
从超棒的HTML5 Boilerplate .htaccess
:
<Ifmodulee mod_rewrite.c> RewriteCond %{HTTPS} !=on RewriteCond %{HTTP_HOST} !^www\..+$ [NC] RewriteRule ^ http://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L] </Ifmodulee>
实际上,我不得不同意Szanto先生。
看来问题不在于:
RewriteCond %{HTTP_HOST} ^mysite\.com$ [NC]
通过一些额外的研究(通过谷歌),我发现这对我很好:
<Ifmodulee mod_rewrite.c> RewriteCond %{HTTPS} !=on RewriteCond %{HTTP_HOST} ^mysite\.com$ [NC] RewriteRule ^ http://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L] </Ifmodulee>
Szanto先生的回答虽然格式良好,但似乎将缺少“www”的所有请求重定向到与所附的“www”重定向。 这对于大多数子域来说不是一个理想的结果。 如果在TL域名之前没有“www”且没有子域名,则上述代码仅重定向。
希望这可以帮助别人。