You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过.htaccess禁止访问根目录文件并允许访问子目录内容

.htaccess访问控制配置方案

实现目标

按照需求实现的访问控制规则对应目录结构如下:

- 根目录(禁止访问)
    - index.php(不可访问)
    - demo.php(不可访问)
    - .htaccess(存放本次配置)
    - Subfolder-1(允许访问其下所有文件和嵌套文件夹)
        - index.php
        - example.php
        - Subfolder-1-Subfolder
    - Subfolder-2(允许访问其下所有文件和嵌套文件夹)
        - index.php
        - example.php
        - Subfolder-2-Subfolder

核心控制逻辑:

  • 完全禁止访问根目录本身、根目录下直接存放的所有文件,同时关闭根目录的目录列表功能
  • 根目录下所有层级的子文件夹、子文件夹内部的任意文件和嵌套目录都可正常访问,不受限制

具体配置代码

将以下代码写入根目录下的.htaccess文件即可,子目录无需额外添加配置:

# 关闭目录列表功能,禁止服务器直接返回目录下的文件清单
Options -Indexes

# 开启URL重写引擎
RewriteEngine On

# 拦截对站点根路径的直接访问,返回403禁止状态
RewriteRule ^$ - [F,L]

# 仅拦截根目录下直接存放的文件请求,放行对子目录的直接访问(兼容子目录访问不带末尾斜杠的场景)
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^[^/]+$ - [F,L]

规则生效说明

  • 所有返回403的拦截场景:
    • 直接访问站点域名根路径(如https://example.com/)
    • 直接请求根目录下存放的任意文件(如https://example.com/index.php、https://example.com/demo.php)
    • 根目录无默认首页时,不会展示目录文件列表
  • 所有不受拦截、可正常访问的场景:
    • 访问根目录下任意一级子目录(兼容带/不带末尾斜杠的访问形式,如https://example.com/Subfolder-1、https://example.com/Subfolder-1/)
    • 访问子目录下任意层级的文件、嵌套子目录内容(如https://example.com/Subfolder-2/Subfolder-2-Subfolder/test.php)

说明:

  1. 规则依赖Apache的mod_rewrite模块,绝大多数虚拟主机环境默认开启该模块,若规则不生效可先确认模块是否启用
  2. 配置中的Options -Indexes默认会同时关闭所有子目录的目录列表,如果需要某个子目录开启文件列表展示,在对应子目录下新建.htaccess写入Options +Indexes即可覆盖配置

内容的提问来源于stack exchange,提问作者Amrit Jha

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 10:33:10