【问题标题】:Redirect root of parked domain in one way, all other urls in another way, using htaccess使用 htaccess 以一种方式重定向停放域的根目录,以另一种方式重定向所有其他 url
【发布时间】:2010-08-24 05:27:43
【问题描述】:

我最近获得了一个备用域(停放)并希望它的行为如下:

  • 针对“alt-domain.com/”(根)的请求:提供“main-domain.com/fakeroot”而不进行重定向 (200)
  • 针对“alt-domain.com/anyotherpage”的请求:通过重定向 (301) 服务“main-domain.com/anyotherpage”

我试过了,但它不起作用:

RewriteCond %{HTTP_HOST} ^(www\.)?alt-domain\.com$ [NC] 
RewriteCond %{REQUEST_URI} ^/$ 
Rewriterule ^(.)$ /fakeroot.php  [L]

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

每个规则都独立工作,但是当两者都存在时,对 root 的请求也会获得重定向。我尝试颠倒顺序,尝试跳过 [S=1],尝试 [NS],但没有运气。那时我意识到我不是 htaccess 专家,也不是 regex 专家。

任何帮助将不胜感激。

D.

【问题讨论】:

    标签: .htaccess


    【解决方案1】:

    问题在于L 标志可能是doesn't work like you expect,当mod_rewrite 重新检查您的规则时,RewriteCond %{REQUEST_URI} !^/$ 匹配,因为%{REQUEST_URI} 在初始重写后更新为/fakeroot.php

    有几种不同的方法可以解决这个问题,但我相信这应该足够好,并且不需要太多改变:

    RewriteCond %{HTTP_HOST} ^(www\.)?alt-domain\.com$ [NC]
    RewriteCond %{REQUEST_URI} ^/$ 
    Rewriterule ^(.)$ /fakeroot.php  [L]
    
    RewriteCond %{HTTP_HOST} ^(www\.)?alt-domain\.com [NC] 
    RewriteCond %{REQUEST_URI} !^/(fakeroot\.php)?$
    RewriteRule ^(.*)$ http://www.main-domain.com/$1 [L,R=301]
    

    【讨论】:

    • 我无法让它工作,即使看起来一切都很好。我最终用 htaccess 重定向了除根以外的所有内容,并在检测到备用域时使用主页代码提供不同的内容。感谢您的帮助
    猜你喜欢
    • 2014-06-08
    • 2015-09-15
    • 2013-07-29
    • 2010-11-25
    • 2016-02-29
    • 2014-07-23
    • 1970-01-01
    • 1970-01-01
    • 2013-04-28
    相关资源
    最近更新 更多