1

是否有可能有一个通用/多域httpd.conf 行将任何非 www 请求重定向到其 www 等效项?

通用,我的意思是不依赖硬编码域名的东西,即。

RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^yourdomain.com [NC]
RewriteRule ^(.*)$ http://www.yourdomain.com/$1 [L,R=301]

我真的不想每次在我的服务器上添加/删除另一个网站时都编辑 httpd.conf,尤其是。该网站是动态添加/删除的!

4

1 回答 1

3

mod_rewrite 文档包含您需要的所有信息,但还有很多内容需要阅读。您想要的有两个部分:首先,您需要匹配任何不以www.;开头的域。然后,您需要为www.当前 URL 添加前缀。

对于第一部分,有这个(适用于RewriteCondRewriteRule):

您可以在模式字符串前面加上“!” 字符(感叹号)来指定不匹配的模式。

所以“主机名不以 www 开头。” 可以这样测试:

RewriteCond %{HTTP_HOST} !^www\. [NC]

对于第二部分,有这样的:

除了纯文本之外,Substition 字符串还可以包含 [...] 服务器变量,如规则条件测试字符串 (%{VARNAME})

所以实际的重定向可以像这样通用:

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

顺便说一句,也可以做相反的事情(将所有内容重定向为没有) ,www.因为RewriteRule替换也可以使用这个:

对最后匹配的 RewriteCond 模式的反向引用 (%N)

因此,您可以在之后捕获主机名中的所有内容并将www.其用作规则的目标:

RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
于 2013-09-28T00:29:12.417 回答