如何在apache2中禁用默认的VirtualHost?

在apache2中,任何具有未知主机的http请求都将被定向到第一个加载的VirtualHost。 有没有办法禁用此function? 换句话说,我想有一个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> 

更新:正如下面和其他地方所build议的,静静地忽略请求可能不是一个好主意,也许会打破RFC的RFC。 但是,由于虚拟主机被devise为模拟具有多个独立的物理HTTP服务器,所以对我来说,无声的忽略方法似乎并不合理。 这将与基于IP的虚拟主机和防火墙closures一些IP(可能不是所有的客户端)相同。

我不确定“默默地失败”是一个好主意。 你应该给客户至less一些指示发生了什么。 也许你可以发送一个HTTP 410“走了”的错误。 像这样的事情应该做的伎俩:

 RewriteRule ^.*$ - [G] 

另外,你应该能够指定一个自定义的410错误文档,这可能只是一个空白的html页面。

这是一个不涉及重写规则的替代方法:

 <VirtualHost _default_:*> <Location /> Deny from all Options None ErrorDocument 403 Forbidden. </Location> </VirtualHost>