如何阻止Apache在域名不存在时显示第一个虚拟主机内容?
解决方案:恢复WHM/cPanel下无匹配域名的默认页面跳转
要解决这个问题,核心是让Apache在匹配不到任何虚拟主机时,优先命中指向defaultwebpage.cgi的默认虚拟主机,而非列表中第一个域名的配置。以下是具体步骤:
1. 创建优先级最高的默认虚拟主机配置
编辑/etc/apache2/conf.d/includes/pre_virtualhost_2.conf文件(该文件会在所有用户虚拟主机配置之前加载,确保优先级最高),添加以下配置:
# 处理HTTP请求(80端口) <VirtualHost *:80> ServerName catchall.invalid ServerAlias * DocumentRoot /usr/local/apache/htdocs RedirectMatch permanent ^/(?!cgi-sys/defaultwebpage.cgi) /cgi-sys/defaultwebpage.cgi </VirtualHost> # 处理HTTPS请求(443端口) <VirtualHost *:443> ServerName catchall.invalid ServerAlias * DocumentRoot /usr/local/apache/htdocs # 使用cPanel默认自签名证书 SSLCertificateFile /usr/local/apache/conf/ssl.crt/server.crt SSLCertificateKeyFile /usr/local/apache/conf/ssl.key/server.key RedirectMatch permanent ^/(?!cgi-sys/defaultwebpage.cgi) /cgi-sys/defaultwebpage.cgi </VirtualHost>
配置说明:
ServerName catchall.invalid:设置无效域名作为标识,避免与真实域名冲突ServerAlias *:匹配所有未被其他虚拟主机覆盖的域名请求RedirectMatch:仅当请求目标不是defaultwebpage.cgi本身时才触发重定向,避免循环跳转- HTTPS部分使用cPanel默认生成的自签名证书,确保HTTPS请求能被正常处理
2. 验证配置并重启Apache
先检查Apache配置是否合法:
apachectl configtest
若返回Syntax OK,使用cPanel官方脚本重启Apache(避免手动重启导致配置被cPanel覆盖):
/usr/local/cpanel/scripts/restartsrv_httpd
为什么之前的配置无效?
- 未设置
ServerAlias *:仅指定单个ServerName无法匹配所有无对应虚拟主机的请求 - 未处理HTTPS端口:当前多数请求使用HTTPS,若未配置443端口的默认虚拟主机,HTTPS请求仍会命中第一个用户域名
- 重定向规则存在循环风险:直接
RedirectPermanent / /cgi-sys/defaultwebpage.cgi会导致访问该CGI文件时也被重定向,引发循环
内容的提问来源于stack exchange,提问作者Gavin
相关产品推荐
相关产品推荐

