Apache-2.4

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

  • July 21, 2019

有很多關於將整個域重定向到另一個域的資訊,但我找不到任何關於將域重定向到第二個域上的特定頁面的已回答問題。這是我設置的:

<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 的預設頁面。如何更改它以使其進入特定頁面?

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重定向所有內容

此指令中的CondPatternRewriteCond需要通過以下任一方式進行更改:

  • 刪除!(否定)前綴。(儘管尾隨$仍會導致以點結尾的 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)重複此重定向。

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