apache的servername不支持泛域名,仅接受一个精确完整域名;泛解析需serveralias *.example.com、mod_vhost_alias模块和virtualdocumentroot(或重写规则)三者协同实现。

Apache 的 ServerName 本身不支持泛域名(如 *.example.com),它只能写一个**精确、完整、不带通配符**的主域名。真正实现泛解析,靠的是 ServerAlias + mod_vhost_alias 模块(或配合重写规则),三者缺一不可。
ServerName 必须写一个真实主域名
它是虚拟主机的“身份证”,Apache 启动时强制校验:必须存在、唯一、合法。常见正确写法:
ServerName example.comServerName www.example.com
错误写法(会启动失败或被忽略):
-
ServerName *.example.com(语法非法) -
ServerName example.com www.example.com(多个值,空格分隔也不行) -
ServerName "example.com"(加引号,Apache 不认)
泛匹配靠 ServerAlias + mod_vhost_alias
要让 a.example.com、api.example.com 等都落到同一个虚拟主机,需:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- 确认已启用
mod_vhost_alias模块(宝塔默认开启;手动环境需在httpd.conf中取消注释LoadModule vhost_alias_module modules/mod_vhost_alias.so) - 在
<virtualhost></virtualhost>块内写:ServerAlias *.example.com - 搭配
VirtualDocumentRoot动态映射路径,例如:VirtualDocumentRoot /www/wwwroot/example_sub/%-2+
其中 %-2+ 表示取 Host 头中倒数第二段及之后部分(test.api.example.com → api.example.com),适合多级子域;若只处理一级子域(如 blog.example.com),可用 %1.example.com 拼接。
多项目泛域名要按顺序配置
如果 a.example.com 走项目 A,其余泛域名(如 b.example.com、*.example.com)走项目 B,必须把项目 A 的 <virtualhost></virtualhost> 放在前面:
- Apache 匹配 Host 头时是**从上到下逐条检查**,一旦命中就停止
- 先写
ServerName a.example.com的块,再写ServerName example.com+ServerAlias *.example.com的块 - 不能把泛域名块放最前,否则 a.example.com 也会被它捕获
宝塔用户不用手写复杂配置
在宝塔面板新建站点时填 *.example.com,它会自动完成三件事:
- 启用
mod_vhost_alias - 生成含
ServerAlias *.example.com的配置 - 设置
VirtualDocumentRoot或用RewriteRule统一转发
但你仍会在配置文件里看到 ServerName example.com —— 这不是疏漏,而是必须项,也是合法写法。










