Apache-2.2
如何在 apache2 中禁用預設虛擬主機?
在 apache2 設計中,任何帶有未知主機的 http 請求都將被定向到第一個載入的 VirtualHost。有沒有辦法禁用此功能?換句話說,我想要一個 Web 伺服器,使用者只能在其中訪問明確命名的 VirtualHost 定義。ServerName 或 ServerAlias 行中未明確提及的任何其他主機名都應被忽略。
這可能嗎?
Listen 80 NameVirtualHost * <VirtualHost _default_:*> # Anything matching this host should be silently ignored. </VirtualHost> <VirtualHost *> DocumentRoot /www/example1 ServerName www.example.com </VirtualHost> <VirtualHost *> DocumentRoot /www/example2 ServerName www.example.org </VirtualHost>
**更新:**正如下面和其他地方所建議的,默默地忽略請求可能不是一個好主意,並且可能會破壞 RFC 的 HTTP。但是,由於虛擬主機旨在模擬具有多個單獨的物理 HTTP 伺服器,因此靜默忽略方法對我來說似乎並不不合理。這與基於 IP 的虛擬主機相同,並且對某些 IP 進行防火牆(可能並非針對所有客戶端)。
我不確定“默默地失敗”是個好主意。您應該至少向客戶說明發生了什麼*。*也許您可以發送一個 http 410“已消失”錯誤。這樣的事情應該可以解決問題:
RewriteRule ^.*$ - [G]
此外,您應該能夠指定一個自定義的 410 錯誤文件,它可能只是一個空白的 html 頁面。
這是不涉及重寫規則的另一種方法:
<VirtualHost _default_:*> <Location /> Deny from all Options None ErrorDocument 403 Forbidden. </Location> </VirtualHost>