301 透過 htaccess、mod_rewrite 將第二個網域重新導向到第一個網域,同時保留子網域 - 有什麼提示嗎?

301 透過 htaccess、mod_rewrite 將第二個網域重新導向到第一個網域,同時保留子網域 - 有什麼提示嗎?

我今天一直在尋找管道,但鑑於我有限的 mod_rewrite 和正規表示式知識,我正在掙扎。

我想要實現的是將domain1(包括子域)重寫為domain2(包括子域)並實現為301。它是」(更好的用途正在等待,我想我會用它來學習一些東西)。

網域 2 配置為通配符,並託管透過子網域 -> 子資料夾內部重寫顯示的微型網站。 (將很樂意根據要求發布此程式碼,這並不棘手,但由於某些奇怪的原因,我確實花了一段時間才使它在沒有無限重寫的情況下工作)。域 1(臨時域)根本沒有設置,但這只是因為我面臨多個選項(DirectAdmin 實現的“別名”或“指針”,或添加為單獨的域並配置為通配符)。如果有人造訪網域 1(轉發網域),則會發生以下情況:

http://sub.domain1.tld -> http://sub.domain2.tld
http://sub.domain1.tld/content.php -> http://sub.domain2.tld/content.php
http://domain1.tld -> http://domain2.tld
http://domain2.tld

讓我煩惱的是,網路上現有的所有解決方案要么將子域映射到目錄,要么只編碼來處理通過http://domain1.tld/.我自己的舊 htaccess 之一,用於將 .co.uk 重定向到 .com,從我想要去的地方開始:

RewriteCond %{HTTP_HOST} ^(www\.)?([^\.]+)\.foo\.com [NC] 
RewriteRule ^(.*)$ http://foo.co.uk/$1 [R=301,L]

我知道這$1表示與模式匹配的域之後的所有內容^(.*)$,並且%2將是子域(所以我假設%1它是“www”,如果它存在於 http_referer 中或以其他方式為空?)

……然而,這就是我陷入困境的地方。將任何變數傳遞到新網域並且在此過程中不丟失任何子網域的最巧妙的重寫方法是什麼?

答案1

有沒有理由重定向不起作用,在domain1的配置中:

Redirect permanent / http://domain2.com/

Redirect將 LHS 下的所有內容重新導向到 RHS,保持相同的目錄結構。

或者,一個更簡單的解決方案是僅添加ServerAlias domain2domain1的配置,儘管這不會發送重定向,只是使伺服器以與domain1相同的方式回應domain2的請求。

答案2

嘗試一些類似的事情(未經測試):

RewriteMatch 301 http://(.*)domain1.com(.*) http://$1domain2.com$2

答案3

我想你想要這樣的東西:

RewriteCond %{HTTP_HOST} ^((www\.)?[^\.]+)\.foo\.com [NC]
RewriteRule ^(.*)$ http://%1.foo.co.uk/$1 [R=301,L]

這將保留 %1(foo.com 的子網域部分,包括 www(如果存在))並將其放入RewriteRule.請記住,這些只是字串mod_rewrite,因此您可以用它們做任何事情。

如果可選的 www 部分帶給您問題,請將其分成兩個RewriteCond語句:

RewriteCond %{HTTP_HOST} ^(www\.[^\.]+)\.foo\.com [NC] [OR]
RewriteCond %{HTTP_HOST} ^([^\.]+)\.foo\.com [NC]
RewriteRule ^(.*)$ http://%1.foo.co.uk/$1 [R=301,L]

相關內容