必须配置 options -indexes 禁用目录索引,推荐写法为 options -indexes +followsymlinks +execcgi,并配合 directoryindex 设置入口文件顺序,重启后验证返回 403 才生效。

精准禁用 Indexes,别删整行或设 None
关键不是删掉 Options 行,也不是改成 Options None(它会一并关闭 FollowSymLinks、ExecCGI 等必要功能,导致重写失效、PHP 无法执行)。
正确做法是显式移除索引权限,同时保留其他所需能力:
-
推荐写法:
Options -Indexes +FollowSymLinks +ExecCGI -
次选写法:
Options FollowSymLinks ExecCGI(前提是确认你不需要 Indexes,且没其他隐含依赖) - 务必检查所有 `
` 块:主配置( httpd.conf)、虚拟主机(sites-available/或httpd-vhosts.conf)、XAMPP/phpEnv 的额外配置(如httpd-xampp.conf),漏一处就可能被绕过
配合 DirectoryIndex 提升可用性
只关 Indexes,会让无首页的目录返回 403 错误,既影响体验,也容易暴露路径结构。建议同步设置入口文件查找顺序:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- 在同一 `
` 块中添加: DirectoryIndex index.php index.html default.htm - Apache 按顺序找第一个存在的文件;都不存在才返回 403
- 对 WordPress、Laravel 等 PHP 应用,index.php 必须放最前,否则静态页优先会破坏路由机制
验证是否真正生效
改完配置必须重启 Apache(sudo systemctl restart apache2 或 XAMPP 控制面板重启),然后实测:
- 准备一个无
index.*文件的子目录(如/uploads/) - 浏览器访问
http://localhost/uploads/ - 正确响应应为 HTTP 403 Forbidden,页面显示 “You don't have permission to access...”
- 若返回 200 并列出文件,说明配置未生效——常见原因是改错了配置文件位置、没重启服务,或被 `.htaccess` 覆盖
警惕 .htaccess 和 AllowOverride 陷阱
如果项目用了 `.htaccess`(如 Laravel、WordPress),需确保它不会悄悄把 Indexes 加回来:
- 检查对应 `
` 块中的 AllowOverride设置:若不需要运行时重写,设为AllowOverride None;若必须支持,至少设为AllowOverride Options - 打开项目根目录下的 `.htaccess`,搜索
Options +Indexes或Options Indexes,删掉或注释掉 - 注意 Apache 2.4+ 不认旧语法
Order Deny,Allow,`.htaccess` 中若混用会直接报 500 错误,权限控制请统一用Require all denied










