2011-10-27 123 views
4

\今天晚上,我幾乎把我的頭髮拉出來試圖找出這個問題。我希望有人能幫助我。將一個頂級域名的所有頁面重定向到另一個頂級域名

我有3個頂級域名的一個網站,類似以下內容:

  • www.domain.com
  • www.domain.org
  • www.domain.net

他們都位於同一個目錄中。

我想設置301重定向,以便.org和.net的所有頁面指向它們在.com位置的相應頁面。

例如,domain.net/topic/page以及www.domain.net/topic/page應永久重定向到www.domain.com/topic/page。

目前,我正在使用下面的代碼,它只將.net和.org主頁重定向到.com主頁。

RewriteCond %{HTTP_HOST} !^(www\.)?domain\.com$ [NC] 
RewriteRule .?$ http://www.domain.com%{REQUEST_URI} [R=301,L] 

謝謝您的時間,

凱西

回答

4

這一個是基於與小的修改你的例子:

RewriteEngine On 
RewriteCond %{HTTP_HOST} !^(www\.)?domain\.com$ [NC] 
RewriteRule ^(.*) http://www.domain.com/$1 [R=301,NE,L] 

NC,R=301L非常明顯。 NE是用於不轉義的,它可以防止查詢字符串變量被兩次轉義。在大多數情況下,^(.*)不需要/

注意:301永久性重定向響應將被瀏覽器緩存,因此在測試時不時清除瀏覽器緩存。否則,您可能看不到您所做更改的結果。

+0

謝謝薩爾曼 - 清理緩存的好處。 –

+0

像我一樣,你的只是重定向主頁。例如,當我輸入domain.net/about時,我仍然登陸.net版本。 –

+0

它似乎在我的系統上工作。嘗試打開您網站上不存在的網址,例如'domain.net/foobar?a = b',看看你是否發送到'domain.com/foobar?a = b' –

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

有寫的電導率許多其他的方式,我這是怎麼做我的 - 積極的進行比較。你的是一個負面的比較,但它的缺點是,如果有人不發送主機頭,它將永久重定向,而你不需要列出所有要重定向的域。如果你願意,你也可以添加一個規則來重定向.com,而不需要www。

該規則的訣竅是在表達() - 這抓住了網址的一部分以備後用與$1

+0

謝謝阿里爾,不幸的是,當我插入你的條件時似乎沒有發生。 –

+0

然後是時候簡化了。將Cond減少爲無 - 即它匹配所有內容,並使規則成爲靜態(不需要$ 1),只是重定向到一個簡單的頁面,然後慢慢地將其添加回來,直到它破裂爲止 – Ariel

0
RewriteEngine On 
RewriteCond %{HTTP_HOST} !^www\.domain\.com$ [NC] 
RewriteRule ^(.*)$ http://www.domain.com$1 [R=301,L] 

這每一個請求到www.domain.com包括查詢字符串和請求重定向-uri如果主機 www.domain.com

+0

感謝您的幫助Seybsen - 但這仍然似乎只重定向主頁。例如,當我輸入domain.net/about時,我仍然登錄.net版本 –

+0

您能否更新您的問題並添加完整的.htaccess或虛擬主機配置?我發佈的重寫是100%的工作(我使用它的情況和你一樣) – Seybsen

相關問題