使用htaccess重写规则进行多域重定向

时间:2012-05-17 20:59:14

标签: .htaccess mod-rewrite url-rewriting

我正在寻找一种方法将所有旧域重定向到新域

它们似乎在基本级别重定向,但是当它出现子类别或perm链接时,根本没有重定向。

    Options +FollowSymLinks 
    RewriteEngine on

    RewriteCond %{HTTP_HOST} (www\.)?mydomain1\.com$ [NC]
    RewriteCond %{HTTP_HOST} (www\.)?mydomain2\.com$ [NC]
    RewriteCond %{HTTP_HOST} (www\.)?mydomain3\.com$ [NC]
    RewriteCond %{HTTP_HOST} (www\.)?mydomain4\.com$ [NC]
    RewriteCond %{HTTP_HOST} (www\.)?mydomain5\.com$ [NC]
    RewriteCond %{HTTP_HOST} (www\.)?mydomain6\.com$ [NC]

    RewriteRule ^(.*) http://www.mydomain7.com/$1 [QSA,L,R=301]

基本级别重定向很好:mydomain1.com/graph.php => mydomain7.com

但即使在此级别,它也无法重定向到同一页面

更重要的是perm-links:

mydomain1.com/users/13/James =>没有重定向

2 个答案:

答案 0 :(得分:8)

最干净的解决方案是重定向任何非www.mydomain7.com

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

答案 1 :(得分:2)

默认情况下,所有RewriteCond都是AND,因此您的规则不起作用,因为%{HTTP_HOST}的值不能同时是所有这些域。

使用Gerben建议的否定或者像这样重写你的代码:

RewriteCond %{HTTP_HOST} ^(www\.)?(mydomain1|mydomain2|mydomain3|mydomain4|mydomain5|mydomain6)\.com$ [NC]
RewriteRule ^ http://www.mydomain7.com%{REQUEST_URI} [L,R=301]
相关问题