Apache二级域名泛解析需DNS配置*记录指向服务器IP,并启用mod_vhost_alias模块,通过VirtualDocumentRoot指令动态映射user.example.com到/var/www/user/public目录,无需重启服务。

Apache 实现二级域名自动泛解析,核心是两步:DNS 层做泛解析(*.example.com → 服务器 IP),Apache 层用 VirtualDocumentRoot 或 mod_rewrite 动态映射请求到对应子目录。不需要为每个新用户手动加 <VirtualHost>,也不用重启服务。
前提:确保 DNS 已配置泛解析
在域名控制台(如阿里云、Cloudflare)添加一条 A 记录:
-
主机名:填
*(星号) - 记录值 / 指向:填你服务器的公网 IP
-
生效时间:通常几分钟内生效,可用
ping test123.example.com验证是否能通
启用 mod_vhost_alias 模块(关键)
该模块提供 VirtualDocumentRoot 指令,用于动态路径匹配。编辑 httpd.conf,取消以下两行前的注释(#):
LoadModule vhost_alias_module modules/mod_vhost_alias.so-
AddModule mod_vhost_alias.c(仅 Apache 2.2;2.4 可省略此行)
保存后重启 Apache:systemctl restart httpd(CentOS)或 apachectl restart(macOS/Linux)。
配置泛解析虚拟主机
在 httpd.conf 文件末尾(或 extra/httpd-vhosts.conf 中)添加如下配置:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
<VirtualHost *:80>
ServerName example.com
ServerAlias *.example.com
UseCanonicalName Off
VirtualDocumentRoot "/var/www/%-2+/public"
</VirtualHost>
说明:
-
%-2+表示倒数第二个点号前的部分 —— 即user.example.com中的user;www.example.com则取www;example.com(无子域)会变成空,建议单独处理或设默认目录 -
/var/www/user/public就是用户站点根目录,需提前创建并设好权限(如chown -R www-data:www-data /var/www/user) - 若想让主域名
example.com也走同一逻辑,可加ServerAlias example.com并在代码中判断$_SERVER['HTTP_HOST']做路由
替代方案:用 .htaccess + mod_rewrite(免改主配置)
如果无法修改 httpd.conf(如虚拟主机环境),可在网站根目录放 .htaccess:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^([a-z0-9-]+)\.example\.com$ [NC]
RewriteCond %1 !^www$ [NC]
RewriteCond /var/www/%1/public -d
RewriteRule ^(.*)$ /%1/public/$1 [L]
注意:AllowOverride All 必须在对应 <Directory> 块中开启,且 mod_rewrite 已加载。
配置完成后,访问 alice.example.com 就会自动指向 /var/www/alice/public,无需新增任何配置项。只要目录存在,子站即上线。

















