必须配置 Options -Indexes 禁用目录索引,推荐写法为 Options -Indexes +FollowSymLinks +ExecCGI,并配合 DirectoryIndex 设置入口文件顺序,重启后验证返回 403 才生效。直接在 Apache 的 `` 配置块里写 `Options -Indexes`,就能禁止自动列出目录文件。这不是可选项,而是必须关掉的安全底线——只要没配默认首页(比如 `index.html` 或 `index.php`),Apache 就会把所有文件名甩给访问者看,上传目录、配置目录、日志目录一旦暴露,风险极高。
关键不是删掉 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),漏一处就可能被绕过
只关 Indexes,会让无首页的目录返回 403 错误,既影响体验,也容易暴露路径结构。建议同步设置入口文件查找顺序:
DirectoryIndex index.php index.html default.htm
改完配置必须重启 Apache(sudo systemctl restart apache2 或 XAMPP 控制面板重启),然后实测:
index.* 文件的子目录(如 /uploads/)http://localhost/uploads/
如果项目用了 `.htaccess`(如 Laravel、WordPress),需确保它不会悄悄把 Indexes 加回来:
AllowOverride 设置:若不需要运行时重写,设为 AllowOverride None;若必须支持,至少设为 AllowOverride Options
Options +Indexes 或 Options Indexes,删掉或注释掉Order Deny,Allow,`.htaccess` 中若混用会直接报 500 错误,权限控制请统一用 Require all denied