使用htaccess以一种方式重定向停放域的根,以另一种方式重定向所有其他URL

时间:2010-08-24 05:27:43

标签: .htaccess

我最近有一个备用域名(停放),并希望它的行为如下:

  • 请求“alt-domain.com/”(root):在没有重定向的情况下发送“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专家,也不是正则表达专家。

非常感谢任何帮助。

d

1 个答案:

答案 0 :(得分:0)

问题是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]