xampp配置虚拟主机必须同时修改httpd.conf中listen端口和httpd-vhosts.conf中,并确保include conf/extra/httpd-vhosts.conf已启用、hosts文件映射域名、documentroot路径用正斜杠、内配置require all granted且路径严格一致,最后用httpd -t验证语法并重启apache。

能加,但必须同时改 Listen 和 <virtualhost></virtualhost>,漏一个就会 403 或连接被拒绝。
确认 XAMPP 的 httpd.conf 实际路径
XAMPP 的 Apache 配置文件不是系统级路径,别去 /etc/httpd/ 或 /etc/apache2/ 找。Windows 下默认是:X:\xampp\apache\conf\httpd.conf;macOS 是:/Applications/XAMPP/xamppfiles/etc/httpd.conf;Linux 是:/opt/lampp/etc/httpd.conf。用 XAMPP 控制面板点 “Config → Apache (httpd.conf)” 最稳妥,它会直接打开正确文件。
添加新端口必须写两处 Listen
只在 httpd.conf 里加一行 Listen 8080 不够——XAMPP 默认已启用 mod_ssl,且自带 HTTPS 配置,httpd-ssl.conf 里也有 Listen 443。如果你只加 Listen 8080 而没检查其他地方,Apache 启动时可能报错:(OS 10048)Only one usage of each socket address... is normally permitted(端口已被占用)。所以:
- 搜索全部
Listen指令:通常在httpd.conf开头附近,也可能分散在httpd-ssl.conf或extra/httpd-vhosts.conf中 - 确保每个要监听的端口只出现一次,且无冲突(比如不要同时
Listen 8080和Listen 0.0.0.0:8080) - 若新增端口是
8080,就在httpd.conf的Listen区域末尾追加:Listen 8080
<virtualhost></virtualhost> 必须配 Require all granted
XAMPP 从 Apache 2.4+ 开始强制使用新权限模型,旧的 Order allow,deny 会被忽略,导致 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
<virtualhost>
DocumentRoot "/xampp/htdocs/myapp"
ServerName localhost:8080
<directory>
Require all granted
</directory></virtualhost>
注意三点:
-
ServerName建议显式写成localhost:8080,避免和默认*:80冲突 -
<directory></directory>路径必须和DocumentRoot完全一致,Windows 路径斜杠用正斜杠/(XAMPP 内部统一处理) - 如果启用了
httpd-vhosts.conf,就把这段加到该文件里,并确认httpd.conf中这行已取消注释:Include "conf/extra/httpd-vhosts.conf"
重启前务必验证语法 + 检查端口占用
改完不验证就重启,大概率服务起不来。顺序不能错:
- 用命令行进到 XAMPP 安装目录下的
apache/bin/,运行:httpd -t—— 输出Syntax OK才算过关 - Windows 下用:
netstat -ano | findstr :8080;macOS/Linux 用:lsof -i :8080,确认端口没被 Skype、IIS 或其他程序占着 - 防火墙要放行:Windows Defender 防火墙需允许
httpd.exe通过专用/公用网络;macOS 要在“系统设置→网络→防火墙→选项”里勾选 Apache - 最后才点 XAMPP 控制面板的 “Stop / Start” —— 别用 “Restart”,它有时跳过配置重载
最常被忽略的是 Require all granted 缺失和端口重复监听,这两处一错,浏览器连连接超时或 403 都不会告诉你真正原因。










