我正在将所有子域名更改为单个域名。 但是,为了不丢失所有我的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
我做错了什么? 提前谢谢。
答案 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\-]+)
我在没有测试的情况下这样做,如果它不起作用我会稍后进行测试,我会回答你。