仅接受裸域名请求,不接受子域名

仅接受裸域名请求,不接受子域名

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

我当前的设置:

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

访问something.example.com指向example.com,我希望它失败并显示404 not found。我可能可以使用 排除所有内容,mode_rewrite但这是最好的解决方案吗?或者我应该在 DNS 级别执行此操作?

感谢您帮助我解决这样一个新手问题。

答案1

您可以创建第二个虚拟主机,作为万能主机,只返回 404。大致如下:

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它将由第二个虚拟主机处理。

答案2

根据 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 默认使用的后备方案吗?

答案3

第一个虚拟主机是默认主机,将匹配每个未知 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>

相关内容