多站点力量www。在所有子域名htaccess片段

时间:2012-12-11 08:58:08

标签: .htaccess mod-rewrite subdomain no-www

我以前在这里得到了一些很好的帮助,有点复杂的.htaccess文件。

这是一个多站点/域文件,使用%{HTTP_HOST}将非wwww重写/ 301到www.widgets.com地址。

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

问题是RegexFu只查找NOT www。然后添加www。

如果有人链接说mail.widgets.com,这可能会导致一些重复的内容问题,因为这会被重定向到www.mail.widgets.com。

总结:

我需要:

mail.widgets.com -> www.widgets.com
dogs.widgets.com -> www.widgets.com
www.mail.widgets.com -> www.widgets.com
www.dogs.widgets.com -> www.widgets.com

我尝试了各种各样的排列,但没有运气:

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

没有骰子。我要么最终得到一个循环或其他一些问题。

我只需要任何不是的东西:

www.   (anything but period)     .com - > www.    (last string before .com)         .com

粗略的标准:

(anything but period).com -> www. (anything but period).com

如果有人可以伸出援助之手,我会非常感激。

1 个答案:

答案 0 :(得分:2)

尝试:

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

%1反向引用在先前重写条件中匹配([^.]+)的分组。它会忽略域名之前的任何子域名(如果有域名)。