【问题标题】:htaccess rewritecondhtaccess 重写条件
【发布时间】:2011-04-03 21:36:18
【问题描述】:

我们有一个包含各种 TLD 的域名。

让我们使用 example.com 作为我们的主 URL,并将 example.biz、example.net、example.org 重定向到 example.com。

我们在 .htaccess 文件中有以下内容,并且效果很好:

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

您注意到任何非 www 都将被重定向到 www。

但是,我们只是添加了一个子域:str.example.com,为了使其可访问,我们必须将上述规则注释掉。

我希望有人可以帮助我们编写重定向规则:

  1. 非 www 和非 str 到 www
  2. 非 .com TLD 到 .com

几个案例说明我的意思:

  1. example.com -> www.example.com
  2. example.net -> www.example.com
  3. abc.example.com -> www.example.com
  4. str.example.com -> str.example.com
  5. str.example.org -> str.example.com

非常感谢。

【问题讨论】:

    标签: .htaccess mod-rewrite


    【解决方案1】:

    这有点复杂,但它为您节省了潜在的额外重定向:

    RewriteEngine On
    
    RewriteCond %{HTTP_HOST} !^(www|str)\.        [NC,OR]
    RewriteCond %{HTTP_HOST} !\.com$              [NC]
    RewriteCond %{HTTP_HOST}  (.*?)\.[A-Z]+$      [NC]
    RewriteCond %1            ^(([^.]+)\.)?example$
    RewriteCond %2            ^(str)              [OR]
    RewriteCond www           ^(www)
    RewriteRule ^ http://%1.example.com%{REQUEST_URI} [R=301,L]
    

    请注意,它也只希望您拥有一个 TLD,因此 example.co.uk 在这里不起作用。不过那不是你的例子之一,所以我没有试图解释它。

    【讨论】:

    • 第四和第五个条件的%1和%2是什么?前面规则中括号之间的值?
    • @Litso - 是的,它们是对先前正匹配的RewriteCond 测试模式的反向引用。所以%1 是捕获(.*?)%2 是从前面两个各自的RewriteCond 语句中捕获([^.]+)
    • 啊,从积极匹配的模式来看,这解释了我没有掌握的部分。又学到了一件事:)
    • 谢谢你,蒂姆。如果我们有另一个子域,是否可以假设我们可以将第一个条件更改为 RewriteCond %{HTTP_HOST} !^(www|str|def)\。 [NC,OR] 和 RewriteCond %2 ^(str|www) [OR] 的第五个条件?再次感谢。 PS。抱歉编辑
    • @user173457 - 没问题。至于您的问题,我认为您的意思是第二个 RewriteCond(str|def),但是是的,这样做应该允许您添加任何其他子域。
    【解决方案2】:

    试试这些规则:

    RewriteCond %{HTTP_HOST} ^([^/.]+)\.example\.[^/.]+$
    RewriteCond %1 !^(www|str)$
    RewriteRule ^ http://www.example.com%{REQUEST_URI} [L,R=301]
    RewriteCond %{HTTP_HOST} ^([^/.]+)\.example\.([^/.]+)$
    RewriteCond %2 !=com
    RewriteRule ^ http://%1.example.com%{REQUEST_URI} [L,R=301]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-04-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-21
      • 2011-10-02
      • 2016-12-14
      相关资源
      最近更新 更多