將整個網域重新導向到 Apache 虛擬主機中另一個網域上的單一頁面

將整個網域重新導向到 Apache 虛擬主機中另一個網域上的單一頁面

有很多有關將整個網域重定向到另一個網域的信息,但我找不到任何有關將網域重新導向到第二個網域上的特定頁面的問題的答案。這就是我所設定的:

<VirtualHost *:80>
    ServerName www.domain2.org.uk
    ServerAlias domain2.org.uk domain1.co.uk www.domain1.co.uk
    DocumentRoot /var/www/html
    ErrorLog logs/mkt-error_log
    CustomLog logs/mkt-access_log common
    RewriteEngine On
    RewriteCond %{HTTP_HOST} !domain1.co.uk$ [NC]
    RewriteRule ^(.*)$ https://www.domain2.org.uk/specific-page/ [L,R=301]
</VirtualHost>

這確實會重定向到domain2 的預設頁面。我如何更改它以使其轉到特定頁面?

答案1

RewriteRule ^(.*)$ https://www.domain2.org.uk/specific-page/ [L,R=301]

這已經滿足您的要求並重定向一切https://www.domain2.org.uk/specific-page/- 如中所述RewriteRule 代換。 (雖然RewriteRule 圖案不必要地捕獲反向引用。

RewriteCond %{HTTP_HOST} !domain1.co.uk$ [NC]

但是(除非這是範例程式碼片段中的拼字錯誤),條件(檢查Host標頭是否不是以 結尾domain1.co.uk將導致重定向循環(domain2.org.uk顯然是不是 domain1.co.uk,所以條件總是滿足)。以及以下RewriteRule重定向一切

條件模式RewriteCond指令中的內容需要透過以下任一方式進行變更:

  • 刪除!(否定)前綴。 (儘管尾隨$仍會導致以點結尾的 FQDN 出現問題。)
  • 或者,更改為!domain2\.org\.uk$

但是......因為您顯然可以訪問伺服器配置並且正在工作虛擬主機就上下文而言,您實際上不應該為此使用 mod_rewrite 。您應該建立一個單獨的虛擬主機,一個用於domain1,另一個用於domain2並使用 mod_aliasRedirectMatch指令來代替......不太容易出錯,效率更高。

例如:

<VirtualHost *:80>
    ServerName domain1.org.uk
    ServerAlias www.domain1.org.uk
    RedirectMatch 301 ^ https://www.domain2.org.uk/specific-page/
</VirtualHost>

<VirtualHost *:80>
    ServerName domain2.org.uk
    ServerAlias www.domain2.org.uk
    DocumentRoot /var/www/html
    ErrorLog logs/mkt-error_log
    CustomLog logs/mkt-access_log common
</VirtualHost>

注意:這些虛擬主機僅適用於 HTTP(連接埠 80),因此您自然需要對 HTTPS(連接埠 443)重複此重新導向。

相關內容