Apache-2.4
將整個域重定向到 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 的預設頁面。如何更改它以使其進入特定頁面?
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
重定向所有內容。此指令中的CondPattern
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)重複此重定向。