directory与filesmatch配合实现“路径+文件名”双层控制:directory划定目录边界,filesmatch在其中按正则匹配文件名,避免全局误伤;filesmatch支持大小写变体和多后缀,不检查文件是否存在,仅匹配url解析出的文件名。

Directory 和 Files 配合使用,是 Apache 实现“路径+文件名”双层控制的关键方式:Directory 定义作用范围(哪个目录),Files 在该范围内锁定具体文件(按名字匹配),从而避免全局误伤,也比单纯用 Location 更贴近真实文件系统结构。
Directory 块先划定边界
必须把
- 想只限制
/var/www/site/uploads/下的 PHP 文件执行,就要写:<directory><br><filesmatch><br> Require all denied<br></filesmatch><br></directory> - 如果漏掉
包裹, 就会对全站所有 .php 文件生效,包括后台脚本、API 入口,直接导致网站崩溃。
FilesMatch 比 Files 更实用
Files 只支持简单通配符(如 *.log、?at.html),而 FilesMatch 支持正则表达式,能精准覆盖多后缀、大小写变体或带查询参数的 URL 形式:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- 禁止访问所有敏感配置类文件:
<filesmatch><br> Require all denied<br></filesmatch>
- 匹配大小写混合的 .PHP 或 .Php:
<filesmatch>Require all denied</filesmatch> - 注意:FilesMatch 不检查文件是否存在,只要请求的 URL 解析出的最终文件名匹配就触发规则。
权限继承与覆盖要心里有数
Apache 按最长路径匹配
- 父目录允许所有访问:
<directory>Require all granted</directory> - 子目录上传路径单独加锁:
<directory><br> Require all granted<br><filesmatch>Require all denied</filesmatch><br></directory>
- 这样既保持上传目录可读,又阻断脚本执行,不会影响根目录下正常的 index.php 运行。
别忘了 .htaccess 的适用场景
-
.htaccess内容示例:<filesmatch><br> Require all denied<br></filesmatch>
- 该规则只对当前目录及子目录中匹配的文件生效,无需重启 Apache,修改即刻起效。
- 前提是父级
允许 AllowOverride All或至少AllowOverride FileInfo。









