我正在重建一个旧服务器。五个旧站点中只有一个需要上线,并且所有五个旧站点都指向同一个 IP 地址。
不幸的是,每当通过旧网站自己的唯一域名对旧网站之一发出请求时,它们都会被传递给我试图上线的网站的页面。我只想让旧网站显示 404,而不是我实际上试图上线的网站。
举个例子:
- 站点 1 (192.168.0.1) [www.first.com]
- 站点 2 (192.168.0.1) [www.second.com]
- 站点 3 (192.168.0.1) [www.third.com]
我想让站点 1 重新上线。因此,我在 IP 地址为 192.168.0.1 的机器上启用了 apache,并将站点 1 的所有文件放在 /var/www 目录中。当我浏览 192.168.0.1 或 www.first.com 时,我可以正确看到站点 1。当我浏览 www.second.com 和 www.third.com 时,我也会收到站点 1,这就是问题所在。
有没有什么办法可以让没有 www.first.com 的任何请求都变成 404 呢?
这是我的可用站点:
NameVirtualHost *:80
LogFormat "%h %l %u %t \"%r\" %>s %b" common
<Files ~ "^\.ht">
Order allow,deny
Deny from all
Satisfy All
</Files>
<Directory />
Order Deny,Allow
Deny from all
Options None
AllowOverride None
Options None
</Directory>
<Directory /var/www>
Order Allow,Deny
Allow from all
</Directory>
<VirtualHost *:80>
ServerName first.com
ServerAlias www.first.com
DocumentRoot /var/www
ErrorLog /var/log/first.com.err
CustomLog /var/log/first.com.log common
</VirtualHost>
<VirtualHost _default_:*>
ServerName unknown
DocumentRoot /var/www_404
</VirtualHost>
答案1
没有匹配的请求ServerName
或ServerAlias
将由第一个加载的块提供服务;只需将 404 的 VirtualHost 移到顶部(它的绑定应该与它默认播放的绑定相匹配,因此将其设置为*:80
- 如果没有它,通配符的 vhost 将不会收到任何请求。)
答案2
对于默认的 VirtualHost,请尝试以下步骤(在顶部,而不是底部):
<VirtualHost _default_:*>
DocumentRoot /var/www_404
</VirtualHost>
否则,如果您在底部有名为“未知”的服务器,它将尝试搜索该服务器;-)
或者,您也可以在 VirtualHost 指令之外指定 DocumentRoot 来定义默认位置,如 Apache 文档中所述这里
编辑:对位置进行细微修正