应禁用Apache的Indexes选项并配置Windows文件权限:在httpd.conf中将Options Indexes FollowSymLinks改为Options FollowSymLinks,添加Require all granted,并为目录及磁盘根目录赋予SYSTEM用户“列出文件夹内容”和“读取”权限。

Apache 在 Windows 7 上默认开启 Indexes,访问空目录(如 http://localhost/uploads/)会直接列出所有文件,这是典型的信息泄露风险。禁用目录浏览不是“关个开关”就行,必须同时处理 Apache 配置和 Windows 文件权限两层,否则可能 403 报错或配置不生效。
如何关闭 Apache 默认目录列表(Options Indexes)
关键不是删掉 Indexes 就完事,而是要确认它被显式禁用,且作用范围覆盖你关心的路径。旧版教程常写 Order Deny,Allow,但在 Apache 2.4+ 中已失效。
- 打开
httpd.conf,搜索<Directory "/">或<Directory "D:/Apache24/htdocs">这类块 - 把
Options Indexes FollowSymLinks改成Options FollowSymLinks(去掉Indexes) - 确保该块内有
Require all granted(不是Allow from all) - 如果只针对某个子目录(如
D:/www/uploads),需单独加一个<Directory "D:/www/uploads">块,并在里面设Options None
为什么改了 Options 还是能列目录或报 403
常见原因不是配置没写对,而是 Apache 进程根本没权限读取那个目录——Windows 权限没放开,<Directory> 配置就形同虚设。
- 右键目标目录(如
D:/www/uploads)→ 属性 → 安全 → 编辑 → 添加用户:SYSTEM - 勾选「列出文件夹内容」和「读取」,**不要勾选「写入」「修改」**(除非该目录真要存上传文件)
- 若目录在非系统盘(如
E:/),还要给E:\根目录加SYSTEM的「列出文件夹内容」权限,否则 Apache 启动时遍历路径失败,直接报 service error 1 - 改完配置后,别急着重启服务,先运行
httpd.exe -t验证语法;再检查错误日志(logs/error.log)里有没有Permission denied提示
禁止特定目录被 Web 访问(如 config、vendor)
仅靠 Options None 不够,攻击者仍可能通过 URL 直接请求 /config/database.php 下载源码。必须用 Require all denied 彻底拦截 HTTP 请求。
立即学习“PHP免费学习笔记(深入)”;
- 在
httpd.conf或虚拟主机配置中添加独立<Directory>块,路径要精确匹配:
<Directory "D:/www/config">
Require all denied
</Directory>
alias 路径下(如 /phpmyadmin),这种虚拟路径必须单独配 <Directory "/phpmyadmin">,不能指望主目录规则自动继承<Directory "*/config">),Apache 2.4+ 不支持这种写法,会导致配置加载失败真正起效的配置,永远是 Apache 规则 + Windows 权限的组合。只改一边,要么 403 报错,要么目录照常暴露——尤其是 SYSTEM 对磁盘根目录的「列出文件夹内容」权限,这个点最容易被忽略,但又是启动和服务稳定的关键。



















