2010-06-03 89 views
3

我試圖與htaccess的國防部重寫來完成:如何重定向子域到其他域

重定向所有子域到新的域名w ^重寫規則。

例如

test1.olddomain.com ===> test1.newdomain.com

test2.olddomain.com ===> test2.newdomain.com

test3.olddomain.com ===> test3.newdomain.com

這是我到目前爲止這當然是錯誤的:

Options +FollowSymLinks 
RewriteEngine on 
RewriteCond %{HTTP_HOST} ^olddomain\.com$ [NC] 
RewriteRule ^(.*)$ http://www.newdomain.com/$1 [R=301,L] 

RewriteCond %{HTTP_HOST} ^www\.olddomain\.com$ [NC] 
RewriteRule ^(.*) http://www.newdomain.com/$1 [R=301,L] 

RewriteRule [a-zA-Z]+\.olddomain.com$ http://$1.newdomain.com/ [R=301,L] 

因爲我還不是正則表達式的癮君子,所以我需要你的幫助......感謝你給予的任何幫助。我也知道我們可以將這兩個前提條件合併爲一個。

注意:我不使用DNS重定向所有域的原因是很多目錄需要特殊的重寫規則才能維護SEO的位置。

回答

3

在.htaccess文件中,RewriteRules匹配的「URL」已被除去域名和導向當前目錄的任何目錄。 (.htaccess文件使用mod_rewrite是一個巨大的痛苦;如果你有機會到服務器的conf做到這一點,而不是有!!)

因此,假設你的.htaccess在你的DocumentRoot,嘗試這樣的事情:

RewriteEngine on 
RewriteCond %{HTTP_HOST} ^(.*)olddomain\.com$ [NC] 
RewriteRule ^(.*)$ http://%1newdomain.com/$1 [R=301,L] 

%1應該與RewriteCond中的第一組匹配,並且$ 1應該與URL部分匹配。

+0

謝謝,這工作完美。 – Codex73 2010-06-04 00:19:19

+0

我很震驚,可能是我第一次獲得mod_rewrite的權利,首先嚐試不經測試! – Artelius 2010-06-04 00:20:04

0
RewriteRule ^(.+)\.olddomain\.com$ http://$1.newdomain.com/ [R=301,L] 

您需要在開始時指定^來要求正則表達式引擎匹配從那裏開始的行。接下來,您匹配「.olddomain.com」之前的任何內容,並將其分配給第一個匹配的模式(稍後可以在$ 1中訪問)。您需要用圓括號(。+)環繞,以便將匹配分配給$ 1。