指向通配符文件夹的子域

我最近有我的域名与我的服务器正常工作,并设法让子域名指向特定的文件夹。 不过,我刚刚注意到一个小问题。 我有/etc/apache2/sites-enabled/000-default设置为:

 <VirtualHost *:80> VirtualDocumentRoot /local/www/%1 ServerName *.dev.localhost </VirtualHost> 

当我去test.dev.mydomain.co.uk它显示/local/www/test/ ,这很好。 但是,我错误的域名,并意识到test.mydomain.co.uk也做同样的事情,当你错过了.dev. 部分。 我不想要这样的事情发生。 有人可以提出任何修正?

如果…

  • 上面的VirtualHost块是您的configuration中的第一个, 并且
  • 没有明确的匹配,例如test.mydomain.co.uk

然后Apache将使用上面的VirtualHosttest.mydomain.co.uk 。 也就是说,在没有明确匹配的情况下,Apache将使用它find的第一个VirtualHost定义。 从文档 :

如果在包含最具体匹配的IP地址和端口组合的虚拟主机组中找不到匹配的ServerName或ServerAlias,则将使用与之匹配的第一个列出的虚拟主机。

解决了这个问题:

 <VirtualHost *:80> VirtualDocumentRoot /local/www/%1 ServerName dev.mydomain.co.uk ServerAlias dev.mydomain.co.uk *.dev.mydomain.co.uk </VirtualHost> 

通过使用ServerAlias。