根本原因是Apache顶层目录策略默认拒绝访问,需在httpd.conf中将块的Require all denied改为Require all granted,并在虚拟主机中为DocumentRoot路径显式配置匹配的块且含Require all granted。

为什么改了端口还是403 Forbidden?
根本原因不是端口没开,而是 Apache 默认拒绝所有根目录外的访问。XAMPP 新增端口后,DocumentRoot 指向的路径(比如 E:/xampp/tx_cn)不在 Apache 默认放行范围内,<directory></directory> 的原始配置是 Require all denied,它会直接拦截所有请求——哪怕端口监听成功、虚拟主机也匹配了。
httpd.conf 里 配置必须改什么?
不能只改某个 <virtualhost></virtualhost> 内部的 <directory></directory>,必须先放开顶层目录策略。找到 httpd.conf 中类似这样的块(通常在 210–230 行附近):
<directory></directory>
AllowOverride none
Require all denied
把它改成:
-
Require all granted是核心,必须启用(Apache 2.4+ 语法) - 保留
AllowOverride none更安全,除非你真要用 .htaccess - 不要加
Order allow,deny这类 Apache 2.2 旧语法,XAMPP 用的是 2.4,默认不识别
改完后,Apache 才会允许进入你指定的 DocumentRoot 路径。
每个 VirtualHost 的 还要单独配吗?
要,而且必须配,且路径必须和 DocumentRoot 完全一致(包括大小写、斜杠方向、结尾无斜杠)。例如:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
<virtualhost>
DocumentRoot "E:/xampp/tx_cn"
<directory>
Require all granted
</directory></virtualhost>
常见错误包括:
-
DocumentRoot是E:/xampp/tx_cn,但<directory></directory>写成"E:/xampp/tx_cn/"(结尾多斜杠)→ 不匹配,权限失效 - 路径用了反斜杠
\但没转义 → Apache 解析失败,启动报错 - 用了中文路径或带空格路径,没加引号 → 启动失败或 403
-
Require all granted写在<virtualhost></virtualhost>外面(比如放在httpd-vhosts.conf文件开头)→ 不生效
配置完不生效?先验证这三步
别急着刷新浏览器,按顺序检查:
- 运行
xampp-control.exe,点 Apache 行的Config → Apache (httpd.conf),确认Include conf/extra/httpd-vhosts.conf这行前面没有# - 命令行进到
XAMPP\apache\bin,执行httpd -t—— 输出Syntax OK才算配置合法;若报错,看提示位置(常是<directory></directory>缺引号或拼写错) - 重启 Apache 后,用
netstat -ano | findstr :8081确认端口确实在 LISTENING 状态;如果没出现,说明 Apache 根本没起来
最容易被忽略的是:改完 httpd.conf 后忘记重启 Apache,或者改了 httpd-vhosts.conf 却没开 Include,导致整个虚拟主机配置压根没加载。










