我有一个相当基本的问题。请耐心等待。
举例来说,假设我在一台服务器上托管“www.example.com”和“www.another-example.com”,其 IP 地址为“1.2.3.4”。
这是一个典型的 Apache 配置:
Listen 80
NameVirtualHost *:80
<VirtualHost *:80>
ServerName www.example.com
# Other directives here
</VirtualHost>
<VirtualHost *:80>
ServerName www.another-example.com
# Other directives here
</VirtualHost>
如何为请求返回 404 错误代码“http://1.2.3.4“而不封锁服务器上的所有网站?
您能否提供一个我应该使用的 apache 配置指令的示例?
答案1
如果 Apache 不知道域名,则第一个虚拟主机定义将用作“全部捕获”。
我知道两个解决方案:
创建一个
<VirtualHost>
指向空文件夹并使其列在所有其他虚拟主机定义之上。%{HTTP_HOST}
使用 mod_rewrite 在第一个虚拟主机中创建一个规则,如果是 IP 地址则返回 404 响应。
方法 1 更合乎逻辑,应用也更广泛。除非在某些特殊情况下,否则我不会使用方法 2。
答案2
第一个定义的虚拟主机将回答针对裸 IP 地址的查询。您还可以只为 IP 地址本身包含一个命名的虚拟主机,并将其指向包含您想要返回的任何内容的目录。