我想用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的位置。
答案 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.