directory按路径控制访问,必须用与documentroot对齐的绝对路径并显式require授权;files按文件名匹配,不依赖路径,支持通配符,可嵌套于directory中实现细粒度防护。

Directory 和 Files 是 Apache 中两个不同维度的配置容器,一个管“路径”,一个管“文件名”。用错容器,权限就可能形同虚设。
Directory:按目录路径控制访问范围
<directory></directory>。路径不匹配(如写成 /var/www 或相对路径)会导致规则完全不生效。
- 权限由 Require 显式定义,Apache 2.4+ 默认拒绝一切,不写 Require 就等于没放行
-
Options 控制功能开关,不是访问权——比如
Options -Indexes是防目录列表泄露,Options -ExecCGI是防上传脚本执行 -
AllowOverride 决定是否允许 .htaccess 覆盖主配置,生产环境建议设为
None,避免权限被绕过 - 多个
块共存时,Apache 按最长路径匹配,更具体的子目录配置会优先生效
Files:按基础文件名精准拦截或启用行为
<files></files> 会命中 /var/www/.htaccess、/uploads/.htpasswd 等所有以 .ht 开头的文件。
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- 支持通配符(
*、?),但不支持正则;如<files></files>匹配cat.html、bat.php - 可嵌套在
内,实现“某目录下某类文件”的细粒度控制,例如仅禁止 /uploads/下的 PHP 执行 - 可在 .htaccess 中使用,适合共享主机或用户可自主管理文件的场景
- 优先级高于
,但低于 ,且在 .htaccess 处理之后、 之前生效
安全访问控制的三个关键组合
单靠一个指令很难守住边界,真正有效的防护是 Directory + FilesMatch + Options 的协同。
-
阻断敏感文件下载:全局添加
<filesmatch>Require all denied</filesmatch>,覆盖所有路径下的匹配文件 -
加固上传目录:单独定义
<directory></directory>,里面加Options None+Require all granted,再嵌套<filesmatch>Require all denied</filesmatch> -
禁用危险功能:对备份、日志、配置等非服务目录,用
<directory>Require all denied Options None</directory>彻底锁死
验证是否真生效
配完不测等于白配。三类请求必须检查:
- 直接访问
https://yoursite/.htaccess→ 应返回 403 Forbidden - 访问一个空目录(如
/test/)→ 不应出现 Index of /test 页面 - 上传一个
test.php到公开目录并直连请求 → 应返回 403 或 500,而非输出执行结果










