必须禁用indexes,这是最核心有效的防护措施;需在httpd.conf、httpd-xampp.conf及httpd-vhosts.conf中所有块内将options indexes followsymlinks改为options -indexes +followsymlinks,重启apache后验证返回403 forbidden。

禁用 Apache 目录列表索引,是防止 .env、config.php、.git/、备份文件等敏感内容被直接下载的关键一步。它不依赖权限或密码,而是从配置源头切断“自动列目录”行为——只要没 index 文件,Apache 就不该给你看里面有什么。
必须改的三个配置位置
XAMPP 或标准 Apache 的配置分散在多个文件里,只改一处容易漏掉。重点检查以下三处的 <directory></directory> 块:
-
C:\xampp\apache\conf\httpd.conf(Windows)或/etc/apache2/apache2.conf(Linux/macOS)中类似<directory></directory>的块 -
C:\xampp\apache\conf\extra\httpd-xampp.conf—— 这个文件专管/phpmyadmin、/security等路径,常默认带Indexes,极易被忽略 -
C:\xampp\apache\conf\extra\httpd-vhosts.conf中每个<virtualhost></virtualhost>内部定义的<directory></directory>,尤其是你自建的站点路径
Options 指令怎么写才安全有效
在每个找到的 <directory></directory> 块里,把原来的 Options Indexes FollowSymLinks 改成:
Options -Indexes +FollowSymLinks
这个写法明确移除索引功能,同时保留符号链接支持(Alias、重写、软链接仍可用)。不要写 Options None,它会一并禁掉 FollowSymLinks,导致 PHP 脚本 403 或路由失效。也别写 Options Indexes -Indexes,语法错误会触发 500。
额外加固:拦截敏感文件类型
禁用目录列表只是基础。攻击者可能绕过目录页,直接请求 .htaccess、backup.zip、.git/config。在主配置或虚拟主机内加上这段:
PHP中文网提供Apache 2.4.62 官方 tar.gz 源码包下载,通过源码编译安装,开发者能够灵活定制模块、优化性能并精准控制安装路径,满足多样化的业务需求。
<filesmatch><br>Require all denied<br></filesmatch>
对日志、备份、版本库等独立目录,再单独加一层保护:
<directory><br>Require all denied<br>Options None<br></directory>
验证是否真生效
改完必须验证,不能只看“没显示列表”。正确做法是:
- 在目标目录下删掉或重命名
index.php和index.html - 用浏览器访问该目录 URL(例如
http://localhost/uploads/) - 观察响应:应返回 HTTP 403 Forbidden,且状态码不是 200 或 404
- 用 curl 或开发者工具检查响应头和 body,确认没 HTML 列表内容
重启 Apache 一定要彻底:XAMPP 控制面板先点 Stop,再点 Start;Linux 上执行 sudo systemctl restart apache2 或 httpd。只点 Restart 可能因缓存未生效。










