serveralias 是实现多域名共享同一站点的核心指令,需与 servername 同处一个 块中;servername 指定唯一主域名,serveralias 以空格分隔多个别名(支持 *.example.com 通配符),二者共同决定请求路由,共用 documentroot 和全部配置。

Apache 中没有 Alias 指令用于“多域名共享”——这是常见误解。你真正需要的,是让多个域名指向同一个网站目录,也就是多个域名共用同一套内容和配置。这靠的是 <virtualhost></virtualhost> 内的 ServerName + ServerAlias,而不是 Alias(Alias 是把 URL 路径映射到文件系统路径,比如 /static/ → /var/www/assets/,和域名无关)。
要实现“多域名共享同一站点”,核心就是:一个虚拟主机块,多个域名通过 ServerAlias 声明。
✅ 正确写法:用 ServerAlias 实现多域名共用
<virtualhost>
ServerName example.com
ServerAlias www.example.com example.net www.example.net blog.example.com
DocumentRoot /var/www/shared-site
<directory>
Require all granted
AllowOverride All
</directory>
ErrorLog ${APACHE_LOG_DIR}/shared-error.log
CustomLog ${APACHE_LOG_DIR}/shared-access.log combined
</virtualhost>
-
ServerName是主域名(必须且唯一) -
ServerAlias后跟空格分隔的其他域名(支持通配符*.example.com,但不支持example.*) - 所有匹配的域名请求,都由这个
<virtualhost></virtualhost>处理,共用DocumentRoot和全部配置
⚠️ 注意:HTTP 和 HTTPS 必须分别配置。如果要用
https://example.net,还得在<virtualhost></virtualhost>块里重复写一遍ServerName+ServerAlias,并配上对应 SSL 证书。
❌ 常见错误写法(别这么干)
把多个域名全塞进
ServerName:ServerName example.com www.example.com→ 语法错误,Apache 启动失败-
在不同
<virtualhost></virtualhost>块里重复写相同ServerAlias:
Apache 2.4.62下载PHP中文网提供Apache 2.4.62 官方 tar.gz 源码包下载,通过源码编译安装,开发者能够灵活定制模块、优化性能并精准控制安装路径,满足多样化的业务需求。
<virtualhost> ServerName site1.com ServerAlias example.net # ❌ 冲突! </virtualhost><virtualhost> ServerName site2.com ServerAlias example.net # ❌ 同一域名被两个虚拟主机声明 → Apache 取第一个,第二个静默失效 </virtualhost> 误用
Alias实现域名绑定:Alias / https://example.net或Alias example.net /var/www/...→ 无效,Alias 不处理 Host 头,也不做域名路由
? 额外要点(确保生效)
-
DNS 必须解析到位:所有
ServerAlias域名都要有 A 记录(或 AAAA)指向服务器 IP -
Apache 版本兼容性:
- 2.4+:无需
NameVirtualHost,直接写即可 - 2.2 或更早:必须在
httpd.conf里加NameVirtualHost *:80(端口需与<virtualhost></virtualhost>一致)
- 2.4+:无需
-
验证是否命中:开启
LogLevel info,查 error log,搜索VHOST,能看到每次请求匹配了哪个ServerName或ServerAlias
? 补充:如果想“动态泛域名”(如 user.example.com → /var/www/user)
那就不是 ServerAlias 的事了,得用 mod_vhost_alias 模块 + DNS 泛解析 + VirtualDocumentRoot,例如:
<virtualhost>
ServerName example.com
ServerAlias *.example.com
UseCanonicalName Off
VirtualDocumentRoot /var/www/%1
<directory>
Require all granted
Options FollowSymLinks
</directory></virtualhost>
前提是已配置 * IN A 泛解析,且 /var/www/alice、/var/www/bob 等目录存在且权限正确。
不复杂但容易忽略










