Apache-2.2

在 apache/centos Web 伺服器上重定向頁面的最佳方式

  • July 9, 2014

我有一個使用虛擬主機在 1 個 IP 地址之外執行 2 個網站的 centos 6.5 Web 伺服器。

domain1.com 和 domain2.com - 都託管在上面的同一個 Web 伺服器上。

我需要將大約 40 個頁面從 domain1 重定向到 domain2,“例如”:

domain1.com/page1 -> domain2.com/new-page-1
domain1.com/welcomepage -> domain2.com/new-welcome-page
domain1.com/johnsmith -> domain2.com/elvis
domain1.com/test -> domain2.com/production

*請注意,我重定向的頁面不在相同的結構/名稱下,它們轉到完全不同的結構/名稱。

誰能建議我可以/需要做什麼來完成這項任務?

編輯#1 我嘗試通過 httpd.conf 文件中的 VirtualHost 部分執行此操作。請參閱下面的我的條目。

<VirtualHost *:80>
ServerName domain1.com
ServerAlias www.domain1.com
RedirectPermanent / http://www.domain2.com/page12345/
</VirtualHost>

<VirtualHost *:80>
ServerName domain1.com
ServerAlias www.domain1.com
RedirectPermanent /AboutUs/Founders http://www.domain2.com/about-us-founders/
</VirtualHost>

在上述兩個條目中,只有第一個可以正常工作並正確重定向。第二個重定向到:http ://www.domain2.com/page12345/AboutUs/Founders 有 什麼想法嗎?

在這種情況下,最簡單的解決方案通常是最好的;在 domain1 VirtualHost 配置中添加 40 個重定向指令,您需要做出的唯一選擇是重定向的永久或臨時狀態:

<VirtualHost *:80>
  Servername domain1.com
  RedirectTemp /page1 http://domain2.com/new-page-1
  RedirectPermanent /welcomepage http://domain2.com/new-welcome-page
</VirtualHost>

回應上面的編輯#1:


當您在 ServerName 或 ServerAlias 中使用多個具有相同域名的 VirtualHost 節時,只有第一個有效,後續的將被忽略。

單個 VirtualHost 節可以包含多個 Redirect 指令,因此將第二個 Redirect 指令移動到第一個 virtualhost 節並刪除第二個。

第二次閱讀上面連結中的手冊 真的很有幫助

任何以 URL-path 開頭的請求都會在目標 URL 的位置向客戶端返回一個重定向請求。匹配的 URL 路徑之外的其他路徑資訊將附加到目標 URL。

範例: Redirect /service http://foo2.example.com/service

如果客戶端請求http://example.com/service/foo.txt>,它將被告知訪問<http://foo2.example.com/service/foo.txt

這與您對 www.domain1.com/AboutUs/Founders 的請求所觀察到的完全一致,該請求觸發RedirectPermanent / http://www.domain2.com/page12345/將原始請求重定向到 www.domain2.com/page12345/AboutUs/Founders

您可以通過正確排序 Redirect 行來解決這個問題,因為 Apache 將按順序處理 Redirect 指令。從最長的 URL 路徑開始,否則它們會被較短目錄上的有效重定向擷取。

&lt;VirtualHost *:80&gt;
  Servername domain1.com
  Redirect /AboutUs/Founders http://www.domain2.com/about-us-founders/
  Redirect /AboutUs/         http://www.domain2.com/about-us/
  Redirect /index.html       http://www.domain2.com/page12345/
  RedirectMatch ^            http://www.domain2.com/page12345/
&lt;/VirtualHost&gt;

對於僅包含http://domain1.com的重定向請求,您通常使用一個^ 而不是/經常顯式重定向 IndexDocument 的好主意,因此 /index.html 條目。

引用自:https://serverfault.com/questions/610948