必须手动在httpd.conf中添加每条listen指令,apache才响应对应端口请求;仅配virtualhost不加listen会导致浏览器访问超时或拒绝连接。

必须手动在 httpd.conf 中添加每一条 Listen 指令,Apache 才会响应对应端口的请求;只配 VirtualHost 而不加 Listen,浏览器访问直接超时或拒绝连接。
Listen 指令必须逐个显式声明
Apache 不会自动监听未声明的端口。哪怕你只打算用 81 和 82,也得把 Listen 80 留着(否则 localhost 默认访问失效)。常见错误是只写 Listen 81、Listen 82,结果 localhost 打不开,还以为配置全崩了。
- 打开
XAMPPpacheconfhttpd.conf - 找到已有
Listen 80行,在它下方新增两行:Listen 81Listen 82 - 确保没有重复
Listen行(比如Listen 81出现两次),否则 Apache 启动失败 - 如果改过默认端口(如把
80改成8080),那ServerName localhost:8080必须和Listen 8080严格匹配,否则虚拟主机不生效
VirtualHost 必须绑定到具体端口且启用 httpd-vhosts.conf
光有 Listen 不够,还得让 Apache 知道“这个端口该把请求交给哪个目录”。XAMPP 默认不加载 httpd-vhosts.conf,这步漏掉,所有端口都 fallback 到 htdocs。
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
- 确认
httpd.conf中这行已取消注释:Include conf/extra/httpd-vhosts.conf - 编辑
XAMPPpacheconfextrahttpd-vhosts.conf,在末尾添加:
<virtualhost>
ServerName localhost
DocumentRoot "D:/xampp/htdocs/project-a"
<directory>
AllowOverride All
Require all granted
</directory></virtualhost><virtualhost>
ServerName localhost
DocumentRoot "D:/xampp/htdocs/project-b"
<directory>
AllowOverride All
Require all granted
</directory></virtualhost>
-
DocumentRoot路径必须存在,且 Windows 路径分隔符用正斜杠/或双反斜杠\,单反斜杠会报错 - 每个
<directory></directory>块必须包含Require all granted,否则返回 403 Forbidden
权限配置不能只改根目录
网上很多教程让你改 <directory></directory> 块,这是危险操作:它放行所有磁盘路径,且在新版 Apache(2.4+)中已被弃用。实际只需为每个项目目录单独授权。
- 不要碰
<directory></directory>块里的Require all denied—— 它是安全基线,改它等于开后门 - 每个
<virtualhost></virtualhost>内必须嵌套对应的<directory></directory>,并明确写Require all granted - 若项目含
runtime目录(如 PbootCMS、ThinkPHP),确保该目录可写,否则缓存/日志写入失败
重启前务必检查端口占用和防火墙
Windows 下 81、82 端口常被 Skype、IIS 或杀毒软件占用,Apache 启动日志里只会显示 “(OS 10013)An attempt was made to access a socket in a way forbidden by its access permissions”,不会告诉你被谁占了。
- 命令行执行:
netstat -ano | findstr :81netstat -ano | findstr :82
查 PID,再用任务管理器定位进程 - Windows 防火墙默认不拦本地回环(
localhost),但若你用127.0.0.1:81访问异常,可临时关闭防火墙测试 - 修改完配置后,必须通过 XAMPP Control Panel 重启 Apache,仅刷新页面无效
最容易被忽略的是 httpd-vhosts.conf 的 Include 是否启用,以及每个 <directory></directory> 块是否紧贴对应 DocumentRoot 路径——路径多一个空格、少一个引号,Apache 就静默跳过该段配置,连错误日志都不记。










