Apache不支持ServerName使用.example.com通配符,必须启用mod_vhost_alias模块,配合ServerAlias .example.com和VirtualDocumentRoot或重写规则实现泛域名匹配。

Apache 不支持像 Nginx 那样直接用 *.example.com 作为 ServerName 的通配符写法——ServerName 指令只接受**精确的单个域名**,不能带星号或正则。
真正起泛匹配作用的是 ServerAlias + vhost_alias 模块
要在 Apache 中实现类似 *.example.com 的泛解析效果,必须组合使用以下三要素:
-
启用
mod_vhost_alias:这是关键模块,负责动态解析 Host 头并映射到对应目录 -
用
ServerAlias声明通配格式:在虚拟主机配置中写ServerAlias *.example.com(注意:这不是ServerName) -
配合
VirtualDocumentRoot或重写规则,把不同子域指向不同路径或统一处理
标准泛域名虚拟主机配置示例
以下是一个能响应所有 xxx.example.com 请求的基础配置(需确保 mod_vhost_alias 已启用):
<virtualhost>
ServerName example.com
ServerAlias *.example.com
UseCanonicalName Off
VirtualDocumentRoot /www/wwwroot/example_sub/%-2+
</virtualhost>
说明:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
-
%-2+表示取 Host 域名倒数第二段及之后部分(如api.example.com→example.com;test.api.example.com→api.example.com),常用于多级子域适配 - 若只要匹配一级子域(如
a.example.com、b.example.com),可改用%1提取首段,再拼接路径 -
ServerName必须设一个真实域名(如example.com),否则 Apache 启动会警告
宝塔用户特别注意
宝塔面板创建 *.example.com 站点时,它底层会自动:
- 启用
mod_vhost_alias(Apache 环境下) - 在配置中写入
ServerAlias *.example.com - 设置
VirtualDocumentRoot或用RewriteRule统一转发 - 但不会修改
ServerName为带星号——那是非法的,也起不了作用
常见误区纠正
这些写法都是错的,Apache 会忽略或报错:
-
ServerName *.example.com—— 语法不合法,启动失败 -
ServerAlias example.*—— 不支持后缀通配,无效 - 只写
ServerAlias *.example.com却没启用mod_vhost_alias—— 泛匹配完全不生效










