如何将子域重定向到其他域

时间:2010-06-03 23:48:22

标签: regex apache .htaccess mod-rewrite

我想用htaccess mod-rewrite实现的目标:

将所有子域重定向到新域名w重写规则。

e.g。

test1.olddomain.com ===> test1.newdomain.com

test2.olddomain.com ===> test2.newdomain.com

test3.olddomain.com ===> test3.newdomain.com

这是我到目前为止所遇到的错误:

Options +FollowSymLinks
RewriteEngine on
RewriteCond %{HTTP_HOST} ^olddomain\.com$ [NC]
RewriteRule ^(.*)$ http://www.newdomain.com/$1 [R=301,L]

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

RewriteRule [a-zA-Z]+\.olddomain.com$ http://$1.newdomain.com/ [R=301,L]

因为我还不是正规表达爱好者,所以我需要你的帮助...感谢您在这里给予的任何帮助。我知道我们也可以将前两个条件编译成一个。

注意:我不使用DNS重定向所有域的原因是许多目录需要特殊的重写规则才能维持SEO的位置。

2 个答案:

答案 0 :(得分:3)

在.htaccess文件中,RewriteRules匹配的“URL”已被删除域名和导致当前目录的所有目录。 (在.htaccess文件中使用mod_rewrite是一个巨大的痛苦;如果你有权访问服务器,那就改为!!)

因此,假设您的.htaccess位于DocumentRoot中,请尝试以下方法:

RewriteEngine on
RewriteCond %{HTTP_HOST} ^(.*)olddomain\.com$ [NC]
RewriteRule ^(.*)$ http://%1newdomain.com/$1 [R=301,L]

%1应该与RewriteCond中的第一个组匹配,而$ 1应该与URL部分匹配。

答案 1 :(得分:0)

RewriteRule ^(.+)\.olddomain\.com$ http://$1.newdomain.com/ [R=301,L]

您需要在开头指定^以要求正则表达式引擎匹配从那里开始的行。接下来,您匹配“.olddomain.com”之前的任何内容,并将其分配给第一个匹配的模式(稍后可以在$ 1中访问)。您需要用括号(。+)括起来,以便将匹配分配给$ 1.