XAMPP多站点成功运行的核心是三点:一、httpd.conf中必须启用Include conf/extra/httpd-vhosts.conf;二、每个VirtualHost的DocumentRoot和ServerName须与hosts文件映射严格一致;三、首个VirtualHost默认兜底,顺序错乱或示例残留将导致403/404或跳回默认页。

XAMPP 多站点能跑起来,核心就三点:httpd.conf 里必须启用 httpd-vhosts.conf 的包含、每个 <virtualhost></virtualhost> 块的 DocumentRoot 和 ServerName 必须与 hosts 文件映射严格一致、第一个 <virtualhost></virtualhost> 会默认兜底——漏掉任一环节,不是 403 就是 404,或者直接跳回 XAMPP 默认页。
确认 httpd.conf 已启用虚拟主机配置文件
Apache 默认不读 httpd-vhosts.conf,这步不手动打开,后面所有配置全是废操作。打开 XAMPPpacheconfhttpd.conf,搜索:Include conf/extra/httpd-vhosts.conf。如果前面有 #,删掉;如果整行被注释或根本不存在,要补上这一行。改完必须重启 Apache(Stop → Start),不能只点 Restart。
常见错误现象:
- 浏览器访问自定义域名,始终显示 XAMPP 默认首页
-
httpd -t验证时提示语法正常,但服务启动后无响应
顺带检查:Listen 80 没被改成其他端口(比如 Listen 8080),否则 *:80 的 <virtualhost></virtualhost> 块不会匹配。
在 httpd-vhosts.conf 中写对 VirtualHost 块
每个站点一个 <virtualhost></virtualhost> 块,顺序很重要:Apache 按照从上到下的顺序匹配 ServerName,没匹配上的请求会落到第一个块。所以建议把 localhost 单独配成第一个块,避免开发时失联。
关键参数要求:
-
DocumentRoot必须是绝对路径,结尾**不能加斜杠**(如"D:/xampp/htdocs/myapp"✅,"D:/xampp/htdocs/myapp/"❌) -
ServerName值必须和hosts文件里写的域名**完全一致**(大小写不敏感,但拼写、点号、TLD 不能错) -
<directory></directory>块里必须有Require all granted,旧版的Allow from all在 Apache 2.4+ 已失效 - 路径中用正斜杠
/或双反斜杠\,单反斜杠会导致 Apache 启动失败
示例(放在 httpd-vhosts.conf 末尾):
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
<VirtualHost *:80>
DocumentRoot "D:/xampp/htdocs/blog"
ServerName blog.test
<Directory "D:/xampp/htdocs/blog">
Require all granted
</Directory>
</VirtualHost>
修改 Windows hosts 文件完成本地域名解析
浏览器不认识 blog.test 这种非公网域名,必须靠系统 hosts 强制映射。以管理员身份打开:C:WindowsSystem32driversetchosts,在文件末尾新增一行:
127.0.0.1 blog.test
注意:
- IP 必须写
127.0.0.1,不能写localhost - 每行只能一个域名,多个站点就多写几行
- 不要加
http://、端口号或路径 - 推荐用
.test或.local作为测试 TLD;避免用.dev(Chrome/Edge 会强制 HTTPS 重定向)
改完不用重启系统,但浏览器 DNS 缓存可能延迟生效,可执行:ipconfig /flushdns(Windows)或换无痕窗口测试。
验证配置并快速定位 403/404 错误
别急着刷浏览器。先在命令行进入 XAMPPpachein 目录,运行:httpd -t。返回 Syntax OK 才说明配置无硬错误。
如果仍报错,优先查日志:XAMPPpachelogserror.log。比浏览器提示准得多:
-
403 Forbidden:大概率是<directory></directory>块里缺Require all granted,或路径权限没放开 -
404 Not Found:检查DocumentRoot路径是否存在、拼写是否和hosts+ServerName完全一致、目录下是否有可访问的默认文件(如index.php) - 访问
localhost反而进了某个项目:说明你没配第一个<virtualhost></virtualhost>块来兜底localhost
最易被忽略的是:httpd-vhosts.conf 里默认示例块没删干净,里面可能含 ServerName dummy-host.example.com 这类干扰项,导致匹配错乱。清空或注释掉所有示例再添加自己的配置。

















