一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

怎么禁止 Apache 自动列出目录文件(Directory Listing)

时间:2026-06-20 10:34:03 编辑:袖梨 来源:一聚教程网

必须配置 Options -Indexes 禁用目录索引,推荐写法为 Options -Indexes +FollowSymLinks +ExecCGI,并配合 DirectoryIndex 设置入口文件顺序,重启后验证返回 403 才生效。

直接在 Apache 的 `` 配置块里写 `Options -Indexes`,就能禁止自动列出目录文件。这不是可选项,而是必须关掉的安全底线——只要没配默认首页(比如 `index.html` 或 `index.php`),Apache 就会把所有文件名甩给访问者看,上传目录、配置目录、日志目录一旦暴露,风险极高。

精准禁用 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 错误,既影响体验,也容易暴露路径结构。建议同步设置入口文件查找顺序:

  • 在同一 `` 块中添加: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 +IndexesOptions Indexes,删掉或注释掉
  • 注意 Apache 2.4+ 不认旧语法 Order Deny,Allow,`.htaccess` 中若混用会直接报 500 错误,权限控制请统一用 Require all denied

热门栏目