为Apache虚拟主机设置默认页面

我们使用多个VirtualHost条目在服务器上运行Apache。 每当有人通过IP地址( http://198.147.xx.xx )访问服务器时,出现一个VirtualHost网站。 这是不希望的。 如果IP直接访问,我们宁愿空白页面出现。 我不确定所select的站点是否是第一个出现在虚拟主机条目列表或什么内容的站点。

如果有人通过IP访问服务器,我们希望设置一个默认的空白页面。 我认为简单地为IP地址设置另一个VirtualHost条目就可以做到这一点,而现在看来,访问任何其他VirtualHost站点都会导致相同的空白默认页面。 这里是我们的configuration的一个例子:

 <VirtualHost *:80> DocumentRoot /vhosts/somesite.com/public ServerName somesite.com <Directory "/vhosts/somesite.com/public"> allow from all Options +Indexes AllowOverride All </Directory> ServerAlias www.somesite.com </VirtualHost> <VirtualHost 198.147.XX.XX:80> DocumentRoot /vhosts/default/public <Directory /vhosts/default/public> allow from all Options +Indexes </Directory> </VirtualHost> 

我们在这里做错了什么? 有没有更好的方法来设置通过IP地址访问服务器的任何人的默认login页面?

如果我没有记错的话,虚拟主机的行为就像这样:

  • httpdsearch具有最具体限定符的虚拟主机。 (如果已经声明了NameVirtualHost ,则为IP地址或主机头)
  • 在没有特定条目的情况下,将使用要定义的第一个虚拟主机。 这被称为默认虚拟主机 ,通常在没有Host头的情况下获得服务。 (即通过IP地址)

现在遇到的问题是,基于IP的虚拟主机比您的全部默认虚拟主机更具体(至less在Host头与ServerNameServerAlias不匹配时)。 为了获得你正在寻找的行为,我认为你需要这样做:

  • 使用空白页面创build*:80的默认虚拟主机。
  • 调整您的somesite.com虚拟主机,以便其ServerAlias包含您不想访问默认虚拟主机的每个名称。

希望有人有一个解决scheme接近实现您想要的最终结果; 已经有一段时间了,我有兴趣从中学习。