You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何阻止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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 14:47:05