2012-09-06 15 views
0

我將所有子域名更改爲單個域名。 但是,爲了不失去我所有的搜索引擎優化,我需要做一些301重定向。我的問題是,我有大約10.000個子域名(這是一個關於城市的網站,每個城市都是一個子域名),所以我需要制定一個通用的重寫規則,以便創建新的URL(否則我的htaccess將會太大)。Mod Rewrite不會將子域名重定向到新的URL格式

我試着自己做,但由於某種原因,它正在做它想做的事(所以我想我做錯了什麼)。這裏是我的代碼:

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

我認爲第一的RewriteCond它是錯的:

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

的「^」符號表示,字符串的開始,它不是組的一部分,所以我認爲你會嘗試:

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

也許,這將是更好的:

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

我做它沒有測試,如果它不工作,以後我會讓測試我會回答你的。

+0

我改變了,但沒有真正有所作爲。 我試過其他的東西,如這裏寫的解決方案[鏈接] http://webmasters.stackexchange.com/questions/14048/mod-rewrite-rule-for-wildcard-subdomains [/鏈接],但仍然無法正常工作。 但是,如果我強制每個城市重寫(例如'RewriteCond%{HTTP_HOST}^new-york.domain \ .com 'RewriteRule ^(。*)http://domain.com/?multi_city=new-york )他們確實工作。 – enekomh

+0

我有關於此的新信息。如果我嘗試從任何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]'它將簡單地忽略條件規則,所以我猜問題應該在那個區域(或不)。 – enekomh

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。這可能不是最有效的解決方案,但它適用於我。希望這有助於其他人。