假设我在由 Apache 驱动的服务器上运行 xy.com。它是默认虚拟主机。
现在有人重写了他的主机文件,将 yz.com 重定向到我的服务器的 IP。由于我的服务器对 yz.com 一无所知,它只是将其解析为默认虚拟主机。因此在这种情况下,yz.com/hello 被解析为 xy.com/hello,并尝试为我的站点的 /hello 页面提供服务。有没有办法(也许使用 RewriteRule 或其他东西)禁用从我的服务器请求 yz.com 的请求?例如给他们一个 403 或其他任何东西,除非它请求 xy.com,否则不要让任何东西通过 Apache。
我在 Ubuntu LTS 上使用最新的 Apache 版本。
答案1
如果您不想将 xy.com 作为默认值,那为什么还要将其作为默认值呢?
添加一个新的默认虚拟主机,它不执行任何操作,只返回 404。
然后添加 xy.com 作为虚拟主机条目。它仅在被请求时才会被使用。
答案2
为什么不简单地将默认 VHost 更改为拒绝 VHost?
<VirtualHost *:80>
ServerName lol.no
DocumentRoot /var/empty/httpd
<Location />
Deny from all
Allow from none
</Location>
</VirtualHost>
<VirtualHost *:80>
...your VHost goes here...
</VirtualHost>
答案3
RewriteRule 可能是这样的:
RewriteCond %{HTTP_HOST} !^your\.site\.com$ [NC]
RewriteRule .* - [F]
另一个解决方案是添加一个新的默认虚拟主机,该主机对所有请求都以 403 响应。
只有匹配的请求才会转到您的真实虚拟主机。