0

我以前在这里得到了一些很大的帮助,有一个有点复杂的 .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

如果有人能帮我一把,我将不胜感激。

4

1 回答 1

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分组。([^.]+)它会忽略域名之前的任何子域(如果有的话)。

于 2012-12-11T09:35:39.600 回答