为什么其他虚拟主机如果我访问未configuration的url生效

我有一个根服务器,我有apache2运行一些虚拟主机configuration处理我的域与一些子域的2。

我意识到如果我尝试访问一些在我的虚拟主机configuration的url,那么我会得到我configuration的一个虚拟主机显示。

例如,我有一个webmail.mydomain.com上设置的webmail客户端。 现在,如果我input类似hello.mydomain.com,那么它显示我的webmail客户端。 绝对没有指向我的webmail客户端或与hello.mydomain.com相关的任何东西。 为什么会这样呢?

对于没有Host:头的请求,或者与任何启用的VirtualHost的ServerNameServerAlias不匹配的请求,apache将从它加载的第一个虚拟主机提供请求。

要解决这种情况,请创build一个“默认”虚拟主机,在所有虚拟主机之前加载。 该虚拟主机的configuration会是这样的:

 <VirtualHost *:80> ServerAdmin webmaster@localhost Redirect 404 / ErrorDocument 404 "Site not found." </VirtualHost> 

这将显示任何不匹配的请求404错误。

如果没有ServerName匹配给定的域,那么只显示启动Apache时读取的第一个虚拟主机。 我不知道有任何可能禁用此行为。 一个怪异的解决方法是确保在所有其他VirtualHost块之前读取虚拟虚拟主机。