最直接办法是修改httpd.conf添加listen指令(如listen 8080)、启用httpd-vhosts.conf并配置对应virtualhost块,同时确保内含require all granted且apache彻底重启,否则易出现403或无法访问。

XAMPP 默认只监听 80 端口,想同时跑多个本地项目(比如一个 Vue 前端、一个 Laravel 后端),最直接的办法就是手动加端口——但别急着改文件,先确认你改的是对的配置、权限和重启方式,否则会卡在 403 Forbidden 或 “无法访问此网站”。
修改 httpd.conf 添加 Listen 指令
Apache 实际监听哪些端口,由 httpd.conf 里的 Listen 指令决定。只加一行不够,顺序和写法都影响生效:
-
Listen必须写在已有Listen 80的下方(不能插在中间某段注释里) - 每行一个端口,例如:
Listen 8080、Listen 8001,不要写成Listen 8080 8001 - Windows 下如果端口被占用(比如 Skype、IIS、WSL2),
httpd启动会静默失败,查不到错误;建议先用netstat -ano | findstr :8080确认端口空闲 - macOS/Linux 用户注意路径:
/Applications/XAMPP/etc/httpd.conf或/opt/lampp/etc/httpd.conf;Windows 通常是D:\xampp\apache\conf\httpd.conf
启用并编辑 httpd-vhosts.conf 配置虚拟主机
光加 Listen 不够,Apache 还得知道“这个端口该服务哪个目录”。这靠 httpd-vhosts.conf 里的 <virtualhost></virtualhost> 块实现,但前提是它得被主配置加载:
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 etc/extra/httpd-vhosts.conf,确保前面没有#(即没被注释掉) - 打开
httpd-vhosts.conf(路径类似/Applications/XAMPP/etc/extra/httpd-vhosts.conf),在末尾追加完整块,例如:
<virtualhost>
ServerName localhost
DocumentRoot "/Applications/XAMPP/htdocs/my-project"
<directory>
Require all granted
</directory></virtualhost>
-
ServerName写localhost就够用;如果配了自定义域名(如dev.local),记得同步改系统hosts文件 -
Require all granted是 Apache 2.4+ 必需的权限指令,旧教程里的Allow from all在新版 XAMPP(3.2.4+)中会直接报错
避免 403 Forbidden 的关键权限配置
即使端口监听成功、VirtualHost 路径也对,仍可能返回 403——问题往往出在根目录的默认拒绝策略上:
- 在
httpd.conf中搜索<directory></directory>,找到类似这样的区块:
<directory></directory>
AllowOverride none
Require all denied
- 这个配置会拒绝所有根路径下的访问,包括你新增的
DocumentRoot(哪怕它在/htdocs下)。必须把它改成允许子目录继承权限: - 保留原区块,**不要删它**;而是确保你的
<virtualhost></virtualhost>内部的<directory></directory>显式写了Require all granted - 如果仍报
403,检查路径中有没有中文、空格或符号;Apache 对路径敏感,推荐全英文、无空格目录名
重启 Apache 与验证端口是否真正生效
改完配置不等于立刻可用,XAMPP 的“重启”按钮有时只软重启,某些改动(尤其是 Listen)需要彻底 stop → start:
- 在 XAMPP 控制面板中,先点
StopApache,等状态变灰后再点Start;不要只点Restart - 启动后看控制台日志:如果出现
(OS 10013)An attempt was made to access a socket in a way forbidden by its access permissions,说明端口被系统或防火墙拦截(Windows 需检查入站规则,macOS 可能要关 SIP 或用sudo启动) - 验证方式不是只开浏览器,而是终端执行:
curl -I http://localhost:8080;返回HTTP/1.1 200 OK才算真通 - 如果页面空白但状态码是
200,检查项目里是否有index.html或index.php;Apache 默认不列目录,DirectoryIndex没配的话会 403
最容易被忽略的是:Apache 2.4 默认禁用所有目录访问,且 httpd-vhosts.conf 不是自动加载的——这两处漏掉任何一项,都会让新加的端口“看起来配了,实际打不开”。










