Apache 重寫:sub.DOM1.TLD1/path > sub.DOM2.TLD2/path
… MAYBE-dup 答案確實解決了我的問題,但問題沒有。
做兩件事:
- 保留子域之前
- 之後保持路徑
.htaccess
我在 SE 或網路上的其他地方都找不到 ONE或 Apache 配置:通過 Apache
.htaccess
重寫,轉發舊域,但保持*兩者相同subdomain
*ANDpath/after
。從:
samesubdomain.
domain1.tld1
/same/path
到:
samesubdomain.
domain2.tld2
/same/path
我有很多子域和尾隨地址。我正在遷移一個舊網站,但需要我的舊訂閱者和他們的頁面仍然可以在新域上工作。
非但關閉重複:(答案解決了我的問題,但問題本身並沒有描述我的問題,但這也解決了我的問題。)
感謝MAYBE-dup answer,對於子域,我目前有:
RewriteEngine On RewriteCond %{HTTP_HOST} ^(.+\.)?domain1.com$ [NC] RewriteRule ^ http://%1domain2.com%{REQUEST_URI} [R=301,L]
…現在,我需要在
the/path
不與此程式碼衝突的情況下添加一半。
儘管連結的問題沒有具體說明這一點,但程式碼實際上也複製了 URL 路徑(和任何查詢字元串)。儘管無可否認,答案沒有任何解釋。
假設:
- 總是有一個子域。因此,您不想重定向域頂點。IE。
domain1.tld1
(沒有子域)不會重定向到domain2.tld2
.在根
.htaccess
文件頂部附近:RewriteEngine On RewriteCond %{HTTP_HOST} ^([^.]+)\.domain1\.tld1 [NC] RewriteRule (.*) https://%1.domain2.tld2/$1 [R=302,L]
該
RewriteCond
指令從請求中擷取子域。替換中的%1
反向引用是對擷取的子域(即。)的反向引用。RewriteRule
([^.]+)
反向引用包含由模式
$1
擷取的 URL 路徑,即。.RewriteRule
(.*)
請注意,我特別省略了CondPattern
$
上的尾隨(字元串結尾錨)以匹配以點結尾的 FQDN。任何查詢字元串都原封不動地傳遞。
請注意,這目前是 302(臨時)重定向。始終使用 302 進行測試以避免記憶體問題。如果您之前使用 301s 進行過測試,那麼您需要確保您已清除瀏覽器記憶體。
RewriteEngine On RewriteCond %{HTTP_HOST} ^(.+\.)?domain1.com$ [NC] RewriteRule ^ http://%1domain2.com%{REQUEST_URI} [R=301,L]
…現在,我需要在不與此程式碼衝突的情況下添加 /path 一半。
程式碼已經包含 URL-path 部分。這就是替換字元串
%{REQUEST_URI}
中的部分。伺服器變數包含完整的 URL 路徑。這只是做與上面相同的事情的另一種方式——我使用了反向引用。(請注意,伺服器變數包含斜杠前綴,而我使用的反向引用不包含,因此替換字元串中的斜杠不同。)RewriteRule
REQUEST_URI``$1``REQUEST_URI
此程式碼在
.com
.請注意,此解決方案使子域可選。它將重定向
domain1.com
(無子域)到domain2.com
.