Mod rewrite Mod Rewrite赢得';t将子域重定向到新的URL格式

Mod rewrite Mod Rewrite赢得';t将子域重定向到新的URL格式,mod-rewrite,redirect,subdomain,Mod Rewrite,Redirect,Subdomain,我正在将所有子域更改为单个域。 然而,为了不失去我所有的搜索引擎优化,我需要做一些301重定向。我的问题是我有大约10000个子域(这是一个关于城市的网站,每个城市都是子域),所以我需要制定一个通用的重写规则来创建新的URL(否则我的htaccess会太大) 我试着自己做,但出于某种原因,它正在做它想做的事情(所以我猜我做错了什么)。这是我的密码: RewriteCond %{HTTP_HOST} ^(.*)\.domain\.com/b/^(.*) RewriteRule ^(.*) ht

我正在将所有子域更改为单个域。 然而,为了不失去我所有的搜索引擎优化,我需要做一些301重定向。我的问题是我有大约10000个子域(这是一个关于城市的网站,每个城市都是子域),所以我需要制定一个通用的重写规则来创建新的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
我做错了什么?
提前谢谢。

我认为第一次重写是错误的:

RewriteCond %{HTTP_HOST} ^(.*)\.domain\.com/b/^(.*)
“^”符号表示字符串开始,它不是组的一部分,因此我认为您可以尝试:

RewriteCond %{HTTP_HOST} ^(.*)\.domain\.com/b/(.*)
也许会更好:

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

我没有进行测试,如果它不起作用,我会稍后进行测试,我会回答你。

因此,经过几个小时后,我终于通过以下方式修复了它:

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

我改变了这一点,但并没有产生任何影响。我尝试过其他方法,比如这里写的解决方案[link],但仍然不起作用。但是,如果我强制每个城市重写一次(例如
RewriteCond%{HTTP_HOST}^new york.domain\.com
RewriteRule^(.*)),它们确实可以很好地工作。我得到了有关这方面的新信息。如果我试图从任何URL中删除www,我应该这样做:
RewriteCond%{HTTP_HOST}^www\.mysite\(.+)RewriteRule^(.*)$http://mysite.%1/$1[R=301,L]
就可以了,但如果我尝试这样做
RewriteCond%{HTTP_HOST}^www\.mysite\.com(+)RewriteRule^(.*)$http://mysite.com%1/$1[R=301,L]
它只会忽略条件规则,因此我想问题应该在该区域(或不在该区域)。