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

Apache *Generic*httpd.conf将非www重定向到www,apache,.htaccess,httpd.conf,apache2.2,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,尤其是动态添加/删除网站 网站

是否可能有一个通用/多域httpd.conf行将任何非www请求重定向到它的www等价物

泛型是指不依赖硬编码域名的东西,即

RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^yourdomain.com [NC]
RewriteRule ^(.*)$ http://www.yourdomain.com/$1 [L,R=301]
我真的不想每次从服务器添加/删除另一个网站时都编辑httpd.conf,尤其是动态添加/删除网站

网站上有你需要的所有信息,但是有很多东西要读。您需要的内容有两个部分:首先,您需要匹配任何不以
www.开头的域。
;然后,您需要将
www.
作为当前URL的前缀

对于第一部分,有以下内容(适用于
RewriteCond
RewriteRule
):

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

因此,“主机名不以www开头”可以这样测试:

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

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

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

RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [L,R=301]
顺便说一句,也可以做相反的事情(将所有内容重定向到没有
www.
),因为
重写规则
替换也可以使用此选项:

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

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

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