【问题标题】:Multi-site force www. on ALL subdomains htaccess snippet多站点力www。在所有子域 htaccess 片段
【发布时间】:2012-11-28 19:11:14
【问题描述】:

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

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

【问题讨论】:

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


    【解决方案1】:

    试试:

    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 反向引用与之前重写条件中的([^.]+) 匹配的分组。它会忽略域名之前的任何子域(如果有的话)。

    【讨论】:

    • 更接近。我认为它会起作用 :) www.person.widgets.com 不会重写为 www.widgets.com :( 我猜这是因为 !^www\. 条件。但是 person.widgets.com 确实如此现在重写到 www.widgets.com....
    • @SamanthaP 添加了一个额外的 OR'ed 条件,以防万一它以 www 开头但有多个 3 级域名
    • 奇数。似乎这是它的第一行: RewriteCond %{HTTP_HOST} !^www\.([^.]+)\.com$ [NC]
    • 哇,您可以在 htacces 中使用 OR 布尔值?!? 眼睛闪烁着可能性
    • 好的,所以 () 是捕获组.....没有 () 的相同正则表达式仍然匹配但不捕获,对吧?
    猜你喜欢
    • 2019-04-14
    • 1970-01-01
    • 2016-11-12
    • 2018-04-11
    • 2017-04-22
    • 2014-03-22
    • 2014-01-05
    • 2016-10-22
    • 1970-01-01
    相关资源
    最近更新 更多