Web-Server

apache2 ip重定向與子域重定向衝突

  • August 21, 2020

所以訪問我的網站example.com按預期工作。我成功配置了重定向,以便abc.example.com重定向到example.com/abc.

配置文件如下所示abc.example.com.conf

<VirtualHost *:80>
   ServerName abc.example.com
   RedirectPermanent / https://example.com/abc
</VirtualHost>

我的問題:

當通過在瀏覽器中輸入原始 IP 地址來訪問我的網站時,我也會被重定向到example.com/abc這不是所需的行為。瀏覽器中的原始 IP 應該讓我放棄example.com

這是example.com.conf文件:

<VirtualHost *:80>
   ServerName example.com
   ServerAlias example.com
   DocumentRoot /var/www/example.com/public_html

   ErrorLog ${APACHE_LOG_DIR}/error.log
   CustomLog ${APACHE_LOG_DIR}/access.log combined
RewriteEngine on
RewriteCond %{SERVER_NAME} =example.com [OR]
RewriteCond %{SERVER_NAME} =www.example.com
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>

我需要更改什麼,以便在我輸入我的 IP 地址example.com時得到服務而不是abc.example.com

這是因為您的虛擬主機之一是預設的。當ServerNameat 伺服器級別(即不在VirtualHost塊中)與 a 中的一個匹配VirtualHost時,這將是預設值。如果沒有設置,那麼它通常是第一個虛擬主機。

假設您使用的是全虛擬主機配置,答案是在虛擬主機塊之外設置ServerName example.com(和相應的)。Listen

參考:https ://httpd.apache.org/docs/2.4/vhosts/name-based.html

主要主人走了

任何與現有請求不匹配的請求都由全域伺服器配置處理,無論主機名或伺服器名如何。

當您將基於名稱的虛擬主機添加到現有伺服器,並且虛擬主機參數匹配預先存在的 IP 和埠組合時,請求現在將由顯式虛擬主機處理。在這種情況下,通常明智的做法是創建一個預設虛擬主機,其 ServerName 與基本伺服器的名稱匹配。然後可以將相同介面和埠上的新域添加為後續(非預設)虛擬主機,但需要單獨配置。

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