必须显式启用indexes选项并配置directory权限块,否则因apache默认拒绝目录访问而报403;同时需确保listen端口与virtualhost端口一致、路径格式正确、禁用旧版权限指令。

直接说结论:XAMPP 默认禁用目录索引(DirectoryIndex 仅匹配特定文件),想通过 http://localhost:8081/ 直接列出文件夹内容,必须显式启用 Indexes 选项并确保 DirectoryIndex 不干扰——否则会报 403 或空白页。
为什么访问端口目录时总显示 403 Forbidden
根本原因不是端口没监听,而是 Apache 对目标目录的默认权限策略太严格。XAMPP 2.4+ 版本中,<directory></directory> 段默认写的是:
<directory></directory>
AllowOverride none
Require all denied
这会直接拒绝所有根路径下的访问请求,哪怕你已配好 <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-vhosts.conf的每个<virtualhost></virtualhost>内,必须嵌套对应的<directory></directory>块 - 里面至少要包含:
Options Indexes FollowSymLinks(Indexes是关键) - 权限指令用 Apache 2.4 推荐的
Require all granted,别混用老式的Order/Allow - 确认
DocumentRoot路径末尾没有多余斜杠,Windows 下路径分隔符统一用正斜杠/或双反斜杠\,单反斜杠会解析失败
如何正确配置 DirectoryIndex 配合多端口
DirectoryIndex 控制“当请求一个目录时,Apache 自动尝试加载哪些文件”。它本身不决定是否允许列目录,但若你希望既支持 index.php 又支持无首页时自动显示文件列表,就得让两者共存且不冲突。
- 在
<directory></directory>块内添加:DirectoryIndex index.php index.html(顺序重要,优先匹配前面的) - 如果目标目录下**没有**这些文件,且你又启用了
Indexes,才会触发目录索引 - 不要在
httpd.conf全局改DirectoryIndex,容易影响其他站点;每个<virtualhost></virtualhost>独立配更安全 - 若看到错误
Invalid command "<directoryindex>,说明你误写了 <code><directoryindex></directoryindex>标签(这是非法语法),正确写法是纯指令:DirectoryIndex index.php
Listen 和 VirtualHost 必须严格对应端口
很多人加了 Listen 8081 却在 httpd-vhosts.conf 里写 <virtualhost></virtualhost>,结果端口开着但请求进不来。
-
httpd.conf中每新增一个端口,必须有对应Listen NNNN行(如Listen 8081) -
httpd-vhosts.conf中每个<virtualhost></virtualhost>的端口号必须和Listen完全一致 - 不要在
<virtualhost></virtualhost>里写ServerName localhost:8081——ServerName只用于基于域名的虚拟主机,多端口场景下可省略或只写localhost - Windows 防火墙默认会拦非 80/443 端口,测试前先临时关闭防火墙,或为
8081、8082等添加入站规则
最容易被忽略的一点:XAMPP 3.2.4+ 默认使用 Apache 2.4,而网上大量教程混用 2.2 的 Order/Allow 和 2.4 的 Require 语法。只要权限段出现 Order 或 Allow from all,Apache 就会启动失败或静默拒绝请求——务必统一用 Require all granted 并删掉所有老式权限指令。










