必须同时启用httpd-vhosts.conf、配置hosts文件映射域名、正确书写块,缺一则导致403/404或跳回默认页;最常见失效原因是httpd.conf中#include conf/extra/httpd-vhosts.conf未取消注释且未重启apache。

必须同时完成三件事:启用 httpd-vhosts.conf、在系统 hosts 文件中映射域名、在 httpd-vhosts.conf 中写对 <virtualhost></virtualhost> 块——缺一不可,否则访问时不是 403/404,就是跳回 XAMPP 默认页。
为什么改了 httpd-vhosts.conf 却没生效
最常见原因是 httpd.conf 没启用虚拟主机配置文件。Apache 默认注释掉了这行:
#Include conf/extra/httpd-vhosts.conf
你得手动删掉开头的 #,保存后重启 Apache(Stop → Start,别只点 Restart)。否则无论你在 httpd-vhosts.conf 里写多少个 <virtualhost></virtualhost>,Apache 根本不会读它。
- 检查方法:打开 XAMPP 控制面板 → Apache → Config → 右键“Apache (httpd.conf)” → 查找
httpd-vhosts.conf,确认该行无# - 顺带确认
Listen 80和ServerName localhost:80没被意外改错,否则 Apache 启动会失败 - 改完务必运行命令验证语法:
cd XAMPPpachein && httpd -t,输出Syntax OK才算过关
DocumentRoot 和 <directory></directory> 路径怎么写才不报 403
Windows 下路径斜杠方向、尾部斜杠、权限三者稍有偏差,立刻触发 403 Forbidden。
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
-
DocumentRoot必须是绝对路径,且用正斜杠/或双反斜杠\,例如:"D:/xampp/htdocs/myproject"(不能是"D: mpphtdocsmyproject") -
DocumentRoot结尾不能有斜杠,<directory></directory>里的路径必须与之完全一致(包括结尾无斜杠) -
<directory></directory>块内必须包含这两行:Require all granted和AllowOverride All,缺一不可 - 确保目标目录下存在
index.html或index.php,否则可能返回 403(禁止列目录)或 404(找不到默认首页)
为什么访问自定义域名却显示 XAMPP 默认首页
说明请求没匹配到你的 VirtualHost,而是落到了 Apache 的“默认宿主”上——通常是 _default_:80 或第一个未显式声明 ServerName 的块。
- 在
httpd-vhosts.conf最前面加一个兜底配置,把默认行为明确收口:
<virtualhost _default_:80>
DocumentRoot "D:/xampp/htdocs"
<directory>
Require all granted
</directory></virtualhost>
- 所有你自己的项目配置,都放在这个块之后
- 每个
<virtualhost></virtualhost>块必须有且仅有一个ServerName,且和hosts文件里的域名严格一致(大小写不敏感,但拼写必须全等) - 如果用了
.dev或.app这类现代 TLD,Chrome/Edge 会强制 HTTPS 重定向,建议统一用.test或.localhost
系统级域名解析必须改 hosts 文件
浏览器根本不会去查 DNS,你写的 ServerName 只是 Apache 内部路由标识;没有 hosts 映射,请求连本地都发不过来。
- 以管理员身份打开:
C:WindowsSystem32driversetchosts - 末尾追加一行:
127.0.0.1 myproject.test(不要加http://,不要加端口,不要空格) - 多个域名就多写几行,每行一个:
127.0.0.1 api.test、127.0.0.1 admin.test - 改完不用重启 Apache,但建议清浏览器 DNS 缓存:
chrome://net-internals/#dns→ “Clear host cache”,或运行ipconfig /flushdns
最容易被忽略的是:Apache 配置语法正确、路径权限也对、hosts 也写了,但忘了把 httpd-vhosts.conf 的 Include 行取消注释——整个流程就卡在这一步,后面全白忙。










