2

我有 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文件,请指导。将不胜感激。

4

1 回答 1

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]
于 2012-09-26T20:44:41.187 回答