mod_rewrite 文档包含您需要的所有信息,但还有很多内容需要阅读。您想要的有两个部分:首先,您需要匹配任何不以www.
;开头的域。然后,您需要为www.
当前 URL 添加前缀。
对于第一部分,有这个(适用于RewriteCond
和RewriteRule
):
您可以在模式字符串前面加上“!” 字符(感叹号)来指定不匹配的模式。
所以“主机名不以 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]