xampp 配置多虚拟域名需三步:启用 httpd-vhosts.conf、配置 hosts 文件映射域名到 127.0.0.1、在 httpd-vhosts.conf 中显式定义 localhost 虚拟主机并按序添加其他域名,且每项需语法正确、路径准确、权限授权。

XAMPP 配置多个虚拟域名,本质是 Apache 虚拟主机(VirtualHost)的启用与路由控制。不启用 httpd-vhosts.conf 就算写满配置也完全无效;不配 hosts 文件,浏览器根本解析不出域名;不显式定义 localhost 对应的 VirtualHost,它就会被第一个站点“劫持”——这三处是 90% 多站点失败的根源。
必须取消注释 Include conf/extra/httpd-vhosts.conf
这是整个多域名机制的开关。XAMPP 默认关闭该行,哪怕你把 httpd-vhosts.conf 写得再完整,Apache 启动时根本不会加载它。
- 打开
XAMPP\apache\conf\httpd.conf - 搜索
Include conf/extra/httpd-vhosts.conf,确认前面没有#;若有,删掉 - 顺手检查
Listen 80和ServerName localhost:80是否被意外改错(比如写成localhost:8080),否则 Apache 直接启动失败 - 保存后不用重启 Apache,但后续所有验证都依赖这一步生效
每个域名都要在 hosts 文件里映射到 127.0.0.1
浏览器不认识 myapp.local 这种本地域名,必须靠系统级 hosts 强制解析。写成 localhost 或留空 IP 是常见错误。
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
- 用管理员权限打开
C:\Windows\System32\drivers\etc\hosts(macOS 是/etc/hosts) - 末尾追加:每行一个,IP 固定为
127.0.0.1,域名之间不能有空格或中文 127.0.0.1 myapp.local127.0.0.1 api.dev127.0.0.1 admin.test- 保存后无需重启系统,但建议清浏览器缓存或用无痕窗口测试
httpd-vhosts.conf 中必须包含 localhost 的显式配置块
一旦启用虚拟主机,Apache 就不再认 httpd.conf 里的默认 DocumentRoot,而是按顺序匹配 VirtualHost 块——第一个未匹配的请求会落到第一个块上。所以如果你没写 localhost,访问 http://localhost 就会跳到你第一个项目目录。
- 编辑
XAMPP\apache\conf\extra\httpd-vhosts.conf - 删掉文件里所有默认示例(以
#开头的大段注释) - 按顺序添加:先写
localhost块(兜底),再写你的自定义域名块 <virtualhost> DocumentRoot "C:/xampp/htdocs" ServerName localhost </virtualhost><p><virtualhost> DocumentRoot "C:/xampp/htdocs/myapp" ServerName myapp.local <directory> Require all granted </directory></virtualhost></p>-
DocumentRoot必须是绝对路径,结尾不能带斜杠(C:/xampp/htdocs/myapp/❌) - 每个
VirtualHost块内务必加<directory></directory>授权,否则 403 Forbidden
改完必须运行 httpd -t 验证语法再重启
拼写错误、引号不闭合、路径不存在……这些都会让 Apache 启动失败,而 XAMPP 控制面板只显示“Start → 灰色”,不报具体错误。
- 进入
XAMPP\apache\bin目录 - 命令行执行:
httpd -t - 返回
Syntax OK才安全;若报错,按提示定位到某行某列修正 - 只有此时才点 XAMPP 控制面板的
Restart或先Stop再Start - 如果仍访问不到,立刻查
error.log(位于XAMPP\apache\logs\error.log),里面会明确写“no listening sockets available”(端口被占)或“directory not found”
最易忽略的一点:Apache 不区分大小写但 Windows 文件系统区分路径大小写。如果你写了 DocumentRoot "C:/XAMPP/htdocs/myapp",而实际目录是 C:\xampp\htdocs\myapp,它可能在某些版本下静默失败——统一用小写路径最稳妥。










