我似乎无法解释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>