如何阻止Apache在访问不存在的域名时显示第一个虚拟主机内容?
如何阻止Apache在访问不存在的域名时显示第一个虚拟主机内容?
我之前维护cPanel服务器的时候刚好碰到过一模一样的问题!这种情况是因为WHM/cPanel更新后,Apache的默认虚拟主机逻辑变了,直接手动改普通配置文件很容易被面板的自动配置覆盖,给你几个亲测有效的解决办法:
方法一:通过WHM的Include Editor配置全局默认虚拟主机
这是最稳妥的方式,避免配置被cPanel的EasyApache 4更新覆盖:
- 登录WHM后台,找到「Apache Configuration」→「Include Editor」
- 选择「Pre Virtual Host Include」,再对应你的Apache版本(比如Apache 2.4)
- 粘贴以下配置内容:
# 处理HTTP请求的默认主机 <VirtualHost *:80> ServerName _default_ RedirectPermanent / /cgi-sys/defaultwebpage.cgi </VirtualHost> # 处理HTTPS请求的默认主机(必须配置SSL证书,否则浏览器会报错) <VirtualHost *:443> ServerName _default_ SSLEngine on # 可以使用cPanel自带的默认SSL证书,路径通常是: SSLCertificateFile /var/cpanel/ssl/cpanel/cpanel.pem SSLCertificateKeyFile /var/cpanel/ssl/cpanel/cpanel.pem RedirectPermanent / /cgi-sys/defaultwebpage.cgi </VirtualHost>
- 保存后重启Apache:
systemctl restart httpd(或service httpd restart,根据系统版本)
方法二:直接用WHM的Tweak Settings一键配置
如果不想写配置代码,可以直接通过面板的调整设置实现:
- 登录WHM后台,找到「Server Configuration」→「Tweak Settings」
- 切换到「Apache」标签页
- 找到「Default Website」选项,选择「Redirect to the cPanel default webpage」
- 保存设置,面板会自动帮你配置好默认虚拟主机的重定向规则
为什么你之前的配置没生效?
- 你之前的
<VirtualHost *>没有明确指定端口,Apache 2.4中建议分别配置:80和:443,否则HTTPS请求不会被这个默认主机捕获 - 直接修改
000-default.conf或pre_virtualhost_2.conf可能会被cPanel的自动配置覆盖,用Include Editor添加的内容会被永久保留 - 使用
ServerName _default_是Apache官方推荐的默认主机标识,能确保捕获所有不匹配其他虚拟主机的请求
测试验证
配置完成后,可以用curl命令测试是否生效:
curl -I http://random-test-domain.tld
如果返回301 Moved Permanently,并且跳转地址是http://random-test-domain.tld/cgi-sys/defaultwebpage.cgi,就说明配置成功了。
备注:内容来源于stack exchange,提问作者Gavin
相关产品推荐
相关产品推荐

