2012-09-25 191 views
2

我有4個域,我希望他們中的3個重定向到最後一個。我已經使用了一些htaccess的規則,他們是偉大的工作,將域名和子文件夾重定向到新域名htaccess

RewriteEngine On 

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

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

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

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

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

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

唯一的問題是,當我輸入「www.first.com/about」它不顯示「www.forth.com/about」剛剛表演一樣的東西 。所有的域名都被轉發到了forth.com,他們沒有託管,所以我不能把htaccess文件放到其他域名中,請指導。將不勝感激。

+0

請澄清一兩件事,當你說「唯一的問題」是,它不顯示新的域名 - 你的意思是根本不工作,不重定向?或者你的意思是它重定向,只是不改變瀏覽器網址字段中的主機名?另外,「第一」是唯一一個不起作用或者他們都有相同的行爲? – Peter

+0

是的,它確實重定向,但在瀏覽器地址欄上顯示舊地址,只有當URL帶有子文件夾時,如果我輸入URL本身,它也會重定向並更改名稱。並且所有這三個域在子文件夾中執行相同的行爲,謝謝 – user1698775

回答

0

這很可能是發生了什麼,至少在我的測試用例中,這個修補程序處理它。

而不是使用[L,R = 301]顛倒順序,並做[R = 301,L]。 L表示Last,它結束循環,評估當時要做什麼。我一直使用[R = 301,L],因爲我可以在任何地方找到所有例子。可能你的apache可能會打到那個L並立即將新的字符串傳回給URL解析器,並且不會將它作爲301重定向發送,因爲它沒有得到那麼遠。

同樣在上面的first.com snippit中,您忽略了^(。*)上的$ - 僅用於該行,但不確定這是否是打字錯誤或者它是否在實際的.htaccess文件中丟失。

否則,你可以用它整理了一下:

RewriteCond %{HTTP_HOST} ^((www.)?)first.com [NC,OR] 
RewriteCond %{HTTP_HOST} ^((www.)?)second.com [NC,OR] 
RewriteCond %{HTTP_HOST} ^((www.)?)third.com [NC] 
RewriteRule ^(.*)$ http://www.forth.com/$1 [R=301,L] 
+0

感謝彼得,但首先在最後的OR完全阻止我的網站,並刪除OR後,它的行爲與以前一樣,我確實改變了L的位置,在實踐中改變。 $是一個錯字。 – user1698775

+0

完全正確的最後一個OR,編輯上面的修復。我可以做更多的測試,但應該可以。 – Peter

+0

我建立了一個新鮮的apache安裝的本地環境,並複製上面的'.htaccess',在我的'/ etc/hosts'文件中爲first.com,second.com和third.com放置127.0.0.1,然後使用www.google.com作爲重定向網站。它可以在不指定文件或僅指定域名的情況下工作,並且可以在瀏覽器中更改URL。唯一增加的步驟是確保在你的'httpd.conf'中正確設置'AllowOverride'。我使用全部爲我的測試,默認情況下它是無和不會這樣工作。 – Peter

相關問題