Apache的ServerName仅支持静态字符串,泛域名动态路由需DNS泛解析+mod_vhost_alias模块+VirtualDocumentRoot配合UseCanonicalName Off实现,其中UseCanonicalName Off是关键,否则%1等变量无法获取Host头。

Apache 的 ServerName 本身**不能动态获取**或解析 %{HTTP_HOST},它只接受静态字符串(如 example.com),写成 ServerName %{HTTP_HOST} 会导致启动失败。真正实现泛域名匹配和动态路由,靠的是三者协同:DNS 泛解析 + mod_vhost_alias 模块 + VirtualDocumentRoot 配合 UseCanonicalName Off。
必须开启并依赖 mod_vhost_alias
仅靠 ServerAlias *.example.com 只能“接收”请求,但不会自动切换网站根目录。要让 api.example.com 自动指向 /www/wwwroot/api 这类路径,必须启用该模块:
- 宝塔面板默认已开启;手动编译或系统安装需确认
httpd.conf中这行未被注释:LoadModule vhost_alias_module modules/mod_vhost_alias.so - Debian/Ubuntu 执行:
a2enmod vhost_alias && systemctl restart apache2 - CentOS/RHEL 检查并取消注释后重启:
systemctl restart httpd
关键配置项:UseCanonicalName Off
这是容易被忽略却决定成败的一环。默认 UseCanonicalName On 会让 Apache 忽略客户端发来的 Host 头,导致 %1、%-2+ 等变量取不到真实子域名。
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- 必须在
<VirtualHost>块内显式设置:UseCanonicalName Off - 否则所有动态路径映射(如
/www/%1)都会失效,全部落到默认目录或报 404
VirtualDocumentRoot 实现动态路径映射
这才是“动态获取 Host 并生成路径”的核心。它支持变量语法,直接读取 Host 头内容:
-
%1→ 取第一个点前的部分:访问blog.example.com,对应目录为/www/blog -
%-2+→ 取倒数第二段及之后:访问dev.api.example.com,得api.example.com,适合多级子域 - 典型配置示例:
VirtualDocumentRoot /www/wwwroot/example_sub/%-2+
DNS 泛解析是前提,不是 Apache 责任
Apache 不做 DNS 解析。你必须先在域名服务商处添加一条 A 记录:
- 主机名填
*(星号) - 记录值填服务器公网 IP
- 用
dig test123.example.com验证是否返回该 IP,不生效则 Apache 再配也没用

















