只接受裸域请求,而不是子域名

我似乎无法解释Apache接受裸域上的请求,但忽略来自子域的任何内容。 我觉得这应该很容易,但是我发现的一切都与redirect子域请求有关,而不是忽略它们。

我目前的设置:

<VirtualHost *:80> ServerName example.com DocumentRoot /var/www/example </VirtualHost> 

访问something.example.com指向example.com ,我希望它失败, 404 not found 。 我大概可以用mode_rewrite排除所有的东西,但这是最好的解决scheme吗? 还是应该在DNS级别上执行此操作?

感谢您帮助我解决这个问题。

你可以创build第二个虚拟主机,作为一个全面的,只是返回404s。 或多或less像这样:

 NameVirtualHost *:80 <VirtualHost *:80> ServerName example.com DocumentRoot /var/www/example </VirtualHost> <VirtualHost *:80> ServerName a.example.com ServerAlias *.example.com RewriteRule ^ - [R=404] </VirtualHost> 
  • 如果请求到达*:80并请求example.com ,则由第一个虚拟主机处理。
  • 如果一个请求到达*:80并要求*.example.com它被第二个虚拟主机处理。

基于mauro.stettler的答案,我发现了一些工作:

 <VirtualHost *:80> ServerName example.com DocumentRoot /var/www/example </VirtualHost> <VirtualHost *:80> ServerName *.example.com ServerAlias *.example.com Options -Indexes </VirtualHost> 

它会抛出403 Forbidden而不是404 Not found但是这样做。

没有-Indexes部分,它显示了我的/var/www目录的目录结构。 这将是Apache用作备用的默认设置吗?

第一个虚拟主机是默认主机,将匹配每个未知VH的请求

做这样的事情:

 # First VH <VirtualHost *:80> ServerName loalhost DocumentRoot /var/www/default </VirtualHost> # Second and more VH <VirtualHost *:80> ServerName example.com DocumentRoot /var/www/example </VirtualHost>