Mod Rewrite不会将子域重定向到新的URL格式

时间:2012-09-06 09:12:11

标签: mod-rewrite redirect subdomain

我正在将所有子域名更改为单个域名。 但是,为了不丢失所有我的SEO,我需要做一些301重定向。我的问题是我有大约10,000个子域名(这是一个关于城市的网站,每个城市都是子域名)所以我需要制作一个通用的重写规则来制作新的URL(否则我的htaccess会太大)。

我尝试自己做,但由于某种原因,它正在做它想做的事情(所以我想我做错了什么)。这是我的代码:

 RewriteCond %{HTTP_HOST} ^(.*)\.domain\.com/b/^(.*)
 RewriteRule ^(.*) http://domain.com/city/$1/b/$2 [R=301,L]

 RewriteCond %{HTTP_HOST} ^(.*)\.domain\.com
 RewriteRule ^(.*) http://domain.com/?multi_city=$1 [R=301,L]

这就是这两条规则的结果。

city.domain.com --> domain.com/?multi_city=/
city.domain.com/b/place --> domain.com/?multi_city=/b/place

我做错了什么? 提前谢谢。

2 个答案:

答案 0 :(得分:1)

所以,经过几个小时,我终于解决了这个问题:

RewriteCond %{HTTP_HOST} ^(.+)\.mydomain\.(.*)
RewriteCond %{REQUEST_URI}   ^/b
RewriteRule ^(.*)$ http://mydomain.%2/city/%1/$1 [R=301,L]

RewriteCond %{HTTP_HOST} ^(.+)\.mydomain\.(.*)
RewriteCond %{REQUEST_URI}   ^/event
RewriteRule ^(.*)$ http://mydomain.%2/city/%1/$1 [R=301,L]

RewriteCond %{HTTP_HOST} ^(.+)\.mydomain\.com
RewriteRule ^(.*)$ http://mydomain.com/?multi_city=%1 [R=301,L]

这样我可以首先重定向地点和事件,如果URL不是那种格式,那么它将转到不同的格式URL。它可能不是最有效的解决方案,但它适用于我。希望这有助于其他人。

答案 1 :(得分:0)

我认为第一次RewriteCond是错误的:

RewriteCond %{HTTP_HOST} ^(.*)\.domain\.com/b/^(.*)

'^'符号表示字符串开头,它不是该组的一部分,所以我认为你会尝试:

RewriteCond %{HTTP_HOST} ^(.*)\.domain\.com/b/(.*)

也许,它会更好:

RewriteCond %{HTTP_HOST} ^(.*)\.domain\.com/b/([a-zA-Z0-9\-]+)

我在没有测试的情况下这样做,如果它不起作用我会稍后进行测试,我会回答你。