* Generic * httpd.conf将非www重定向到www

时间:2013-09-27 23:39:01

标签: apache .htaccess httpd.conf apache2.2

是否可以拥有通用/多域 httpd.conf行,将任何非www请求重定向到其www等价物?

通用,我指的是不依赖于硬编码域名的东西,即

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

每次我从服务器添加/删除其他网站时,我真的不想编辑httpd.conf。网站是动态添加/删除的!

1 个答案:

答案 0 :(得分:3)

mod_rewrite documentation包含您需要的所有信息,但需要阅读很多内容。您想要的部分分为两部分:首先,您需要匹配任何不以www.开头的域名;然后,您需要在www.前加上当前网址。

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

  

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

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

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

第二部分是:

  

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

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

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

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

  

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

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

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