0

我正在将我的所有子域更改为单个域。但是,为了不丢失我所有的 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

我究竟做错了什么?提前致谢。

4

2 回答 2

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。这可能不是最有效的解决方案,但它对我有用。希望这对其他人有帮助。

于 2012-09-07T08:12:02.330 回答
0

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

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

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

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

也许,它会更好:

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

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

于 2012-09-06T09:36:19.073 回答