将域和子文件夹重定向到新域htaccess

时间:2012-09-25 23:50:36

标签: .htaccess mod-rewrite redirect dns subdirectory

我有4个域,我想要其中3个重定向到最后一个。我已经使用了一些htaccess规则并且它们工作得很好,

RewriteEngine On

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

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

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

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

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

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

唯一的问题是,当我输入“www.first.com/about”时,它没有显示“www.forth.com/about”只显示同样的事情。所有域名都转发到forth.com,他们没有托管所以我不能把htaccess文件放到其他域名,请指导。将不胜感激。

1 个答案:

答案 0 :(得分:0)

这很可能发生了什么,至少在我的测试用例中,这个修补程序会处理它。

而不是使用[L,R = 301]反转顺序并执行[R = 301,L]。 L表示最后一个,它结束循环评估在该点做什么。我总是使用[R = 301,L],因为我可以在任何地方找到所有的例子。您的apache可能正在点击L并立即将新字符串传回URL解析器,并且不会将其作为301重定向发送,因为它没有那么远。

同样在上面的first.com上,您在^(。*)上省略了$ - 但仅限该行,不确定这是否是错字或者是否在您的实际.htaccess文件中丢失了。

否则,您可以使用以下方法将其整理一下:

RewriteCond %{HTTP_HOST} ^((www.)?)first.com [NC,OR]
RewriteCond %{HTTP_HOST} ^((www.)?)second.com [NC,OR]
RewriteCond %{HTTP_HOST} ^((www.)?)third.com [NC]
RewriteRule ^(.*)$ http://www.forth.com/$1 [R=301,L]