1

.htaccess 中的下一个简单规则,用于将所有非 www 的请求重定向到 www:

  RewriteCond %{HTTP_HOST} !^www\.(.*)$ [NC]
  RewriteRule ^(.*)$ http://www.%1/$1 [R=301,L]

并在使用同类 URL 进行检查时

http://example.com/something

这将我重定向到

http://www./something

似乎 RewriteCond 有效,但正则表达式的结果中没有任何内容,我认为必须是没有 www 的主机名。怎么了——谁知道呢?

重定向到具体主机的规则变体,例如:

  RewriteCond %{HTTP_HOST} !^www\.(.*)$ [NC]
  RewriteRule ^(.*)$ http://www.example.com/$1 [R=301,L]

和其他类似的变体工作正常。

4

2 回答 2

2

而不是捕获HTTP_HOSTinto %1with (.*)(这对你不起作用),只需%{HTTP_HOST}替换RewriteRule

RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]

你拥有它的方式,你似乎%1没有因为!否定而被填充。

文档RewriteRule

使用 NOT 字符否定模式时,不能在该模式中包含分组的通配符部分。这是因为,当模式不匹配(即否定匹配)时,组没有内容。因此,如果使用否定模式,则不能在替换字符串中使用 $N!

于 2013-02-12T03:26:11.800 回答
0

这种标准的做法似乎是:

RewriteCond %{HTTP_HOST} ^example\.com$
RewriteRule ^(.*) http://www.example.com/$1 [R=301]

这就是mediatemplewordpress等推荐他们的用户设置他们的 .htaccess 文件的方式。

于 2013-02-12T03:37:31.707 回答