.htaccess的下一个简单规则,用于将非www的所有请求重定向到www:
RewriteCond %{HTTP_HOST} !^www\.(.*)$ [NC]
RewriteRule ^(.*)$ http://www.%1/$1 [R=301,L]
并使用种类的网址检查
http://example.com/something
这会将我重定向到
http://www./something
似乎RewriteCond有效,但正则表达式没有任何结果,我认为必须是没有www的主机名。怎么了 - 谁知道?
重定向到具体主机的规则变体,如:
RewriteCond %{HTTP_HOST} !^www\.(.*)$ [NC]
RewriteRule ^(.*)$ http://www.example.com/$1 [R=301,L]
和其他类似的变种工作正常。
答案 0 :(得分:2)
而不是使用HTTP_HOST
将%1
捕获到(.*)
(这对您不起作用),而只需替换%{HTTP_HOST}
中的RewriteRule
:< / p>
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]
您拥有它的方式,由于%1
否定,您的!
未填充,看起来就像。
RewriteRule
documentation:使用NOT字符否定模式时,不能在该模式中包含分组通配符部分。这是因为,当模式不匹配时(即,否定匹配),组没有内容。因此,如果使用了否定模式,则不能在替换字符串中使用$ N!
答案 1 :(得分:0)
这种标准方式似乎是:
RewriteCond %{HTTP_HOST} ^example\.com$
RewriteRule ^(.*) http://www.example.com/$1 [R=301]
这就是mediatemple,wordpress等建议用户设置.htaccess文件的方式。