Apache未加载httpd-vhosts.conf是配置不生效的首要原因,需取消httpd.conf中#Include conf/extra/httpd-vhosts.conf的注释并重启服务,再用httpd -t验证语法。

改了 httpd-vhosts.conf 却没反应?大概率不是配置写错了,而是 Apache 根本没加载它,或者加载后被其他配置覆盖、拦截了。
httpd.conf 里必须启用 Include 才会读 httpd-vhosts.conf
XAMPP 默认把 Include conf/extra/httpd-vhosts.conf 这行注释掉了。不取消注释,Apache 启动时压根不会看这个文件。
- 打开
XAMPP\apache\conf\httpd.conf - 搜索
httpd-vhosts.conf,找到这行:#Include conf/extra/httpd-vhosts.conf - 删掉开头的
#,保存 - 重启 Apache(不是刷新页面,是点 XAMPP 控制面板里的 Stop → Start)
- 验证是否生效:命令行运行
httpd -t,输出Syntax OK才算通过
端口改了,但 httpd-vhosts.conf 里还写 *:80 就会失效
如果你为避开端口冲突,把 Apache 改成了 Listen 8080,但 httpd-vhosts.conf 里还是 <virtualhost></virtualhost>,那这个虚拟主机永远不会匹配到请求。
-
<virtualhost></virtualhost>的端口号必须和Listen指令一致,否则 Apache 不会路由过去 - 比如改了
Listen 8080,就要把所有<virtualhost></virtualhost>改成<virtualhost></virtualhost> - 如果同时启用了 HTTPS,
httpd-ssl.conf里的<virtualhost _default_:443></virtualhost>也要同步改成对应端口,比如<virtualhost _default_:8443></virtualhost> - 别漏掉
ServerName localhost:8080这类带端口的全局配置项
多个 VirtualHost 共存时,_default_:80 会抢走所有请求
XAMPP 自带的 httpd-vhosts.conf 示例里通常有一段 <virtualhost _default_:80></virtualhost>,它会作为兜底规则捕获所有未匹配的请求——哪怕你配了 myapp.test,只要没完全命中,就进这里,结果就是看到默认首页或 403。
XAMPP 8.0.30 是一款免费、开源的跨平台 Web 服务器集成包,专为快速搭建本地 PHP 开发环境而设计。该版本核心组件包括:Apache 2.4.56、MySQL 8.0.33、PHP 8.0.30、phpMyAdmin 5.2.1 等。它支持 Windows、Linux 和 macOS 系统,可让开发者在个人电脑上轻松模拟服务器环境,无需复杂配置即可运行 WordPress、Thin
- 要么直接删掉这段
_default_配置 - 要么把它挪到文件最底部(Apache 按顺序匹配,靠后的才兜底)
- 确保你的自定义
ServerName和ServerAlias拼写完全一致,包括大小写和末尾点号(myapp.test≠myapp.test.) - 检查系统
hosts文件是否已添加127.0.0.1 myapp.test,否则浏览器根本发不到你的 Apache
CustomLog 路径错误会导致 Apache 启动失败
很多人在 httpd-vhosts.conf 里加了 CustomLog "D:/xampp_log/myapp.log" combined,结果 Apache 直接启动失败,报错 “Apache shutdown unexpectedly”。这不是语法错,而是路径权限或目录不存在。
- Apache 进程没有权限写入你指定的任意路径(尤其跨盘符、非 XAMPP 目录)
- 日志目录
D:/xampp_log/必须手动创建,且 Apache 用户(Windows 下通常是 SYSTEM)要有写入权限 - 更稳妥的做法:用相对路径,比如
CustomLog "logs/myapp-access.log" combined,让日志落在XAMPP\apache\logs\下 - 如果只是调试,可以先删掉
CustomLog和ErrorLog行,确认虚拟主机能跑通再加回来
真正卡住人的地方,往往不是怎么写,而是 Apache 哪里没读到、哪里优先级更高、或者哪个路径它压根没权限碰——每次改完,记得 httpd -t 验证 + 查 apache\logs\error.log,比瞎猜快得多。










