將網頁重定向到另一個站點而不更改 URL
我有一個域名 (example2.com),用於將使用者定向到同一伺服器 (example.com/page2) 上另一個網站的特定頁面。我正在按照本文中的說明在不更改 URL 的情況下創建重定向,請參見範例 2,但一定是做錯了什麼,因為我得到的影響要麼是錯誤消息,要麼是在 index.html 上傳入虛擬內容. 當我刪除 index.html 時,我得到:
未找到請求的 URL / 在此伺服器上未找到”正如沒有 index.html 的預期。
我通過
example2.com.conf
在站點可用中創建一個新的虛擬主機並在站點啟用中創建了一個符號連結,從而在 apache 中設置了一個新的虛擬主機。我創建了一個虛擬 index.html 並在example2.com.conf
文件中定義了 docroot。到目前為止一切都很好,載入了虛擬內容。我在example2.com的docroot中的文件的全部內容
.htaccess
如下:RewriteEngine on RewriteCond %{HTTP_HOST} ^example2.com RewriteRule ^(.*) http://www.example.com/page2 [P]
我希望域載入的頁面上的任何連結要麼是外部連結,要麼可以正常訪問 example.com。這是一個無品牌的合作夥伴項目頁面,使用 Drupal 建構。域名 (example2.com) 需要載入 (example.com/page2) 但在地址欄中顯示 example2.com。這是域名的唯一內容,所以我只為它創建了一個 docroot 以測試虛擬內容並創建 .htaccess。
Apache 和 Debian 9。
我還嘗試了這篇文章中的一些建議,其中許多建議你不能使用 .htaccess 文件來做到這一點。我還嘗試了以下答案中的建議。
注意:隨著我越來越接近解釋我正在嘗試做的事情,這個問題已經進行了重大改寫。
你可以。有幾個選項可以做到這一點。
一種方法是配置一個真正的虛擬域 example2.com 並僅設置 Redirect 選項以將所有內容重定向到您想要的位置。這實際上是更簡單、更輕的方法(mod_rewrite 更像是“重型火砲”)。
是的
<VirtualHost *:80> ServerName example2.com Redirect / http://example.com/page2 </VirtualHost>
DigitalOcean 似乎推薦這種方法。
實際的重定向條件當然可以改變。
另一種方法是學習如何配置 mod_rewrite。如果您的 mod_rewrite 已正確載入並且您的配置部分將實際接收請求(即正確設置 VirtualHost 或主伺服器),也沒有其他 mod_rewrite 指令可以乾預此指令,您可以使用以下內容:
RewriteEngine On RewriteCond %{HTTP_HOST} ^example2\.com$ [NC] RewriteRule ^(.*)$ http://example.com/page2/$1 [L,R]
要僅載入首頁,您可以替換 RewriteRule 中的 .* 匹配條件,即僅擷取索引頁面(“空請求”):
RewriteRule ^$ http://example.com/page2 [L,R]
(或者應該是 ^/$?我不知道,兩個都試試)。
https://stackoverflow.com/questions/13021893/htaccess-mod-rewrite-hostname
請注意,兩個選項的行為不同。第一個將告訴使用者代理載入另一個 URL,因此使用者可以注意到他們移動到另一個地址。第二個將向使用者呈現其他地址的內容,就好像它位於第一個位置一樣,即使用者將看到example2.com域名,但頁面將來自example.com/page2。他們無法知道此頁面是否在其他地址可用。因此,頁麵包含包含的媒體(css、圖像、字型),您也必須為它們提供重寫規則,或者只為它們使用絕對 URI。
我個人建議關注 Apache 開發人員並儘可能避免使用 mod_rewrite(另請參閱此答案)。
另請參閱mod_rewrite 的官方文件。請注意,此模組是功能,因此請謹慎使用。