FilesMatch是Apache中基于正则表达式匹配文件名并施加配置的核心指令,作用于请求URI的文件名部分,支持PCRE语法,常用于限制访问、强制解析或防盗链等场景,需嵌套具体指令生效。

FilesMatch 是 Apache 中用于按正则表达式精准匹配文件名并施加配置指令的核心容器指令,作用范围比 <Files> 更灵活、更强大。
匹配逻辑与基本语法
它使用 Perl 兼容正则表达式(PCRE),对请求 URI 的**文件名部分**(不含路径)进行匹配。常见写法如:
-
<FilesMatch "\.(php|html|phar)$">—— 匹配以 .php、.html 或 .phar 结尾的文件 -
<FilesMatch "^admin\..*\.php$">—— 仅匹配 admin 开头、.php 结尾的文件(如 admin.backup.php) -
<FilesMatch "(?i)\.jpg$">——(?i)启用忽略大小写,匹配 .JPG/.jpg/.Jpg 等
典型应用场景
它不单独生效,必须嵌套具体指令才能起作用,常见组合包括:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
-
限制敏感文件访问:如
<FilesMatch "^(config|database|\.ht)\.php?$"> Deny from all </FilesMatch> -
强制 PHP 解析 HTML:配合
SetHandler,让 .html 文件走 PHP-FPM:<FilesMatch "\.(php|html)$"> SetHandler "proxy:unix:/run/php-fpm/www.sock|fcgi://localhost" </FilesMatch> -
禁止解析上传目录中的 PHP:在 upload 目录中关闭引擎,再用 FilesMatch 防止绕过:
<Directory "/var/www/upload"> php_admin_flag engine off </Directory><br><FilesMatch "\.php$"> Require all denied </FilesMatch>
-
防盗链控制:结合
SetEnvIfNoCase和环境变量判断 Referer,再用Allow from env=xxx
作用域与优先级
FilesMatch 可出现在主配置(httpd.conf)、虚拟主机(VirtualHost)、<Directory> 容器内,甚至 .htaccess(需 AllowOverride All)。它的执行顺序在 <Directory> 和 .htaccess 之后、<Location> 之前,因此能覆盖目录级设置但无法覆盖 URL 路径级策略。
注意事项
实际使用时要注意几点:
- 正则中的
^和$很关键——不加$可能误匹配(如.phpx也会被"\.php"匹中) - Apache 2.4 推荐用
Require all denied替代旧版Deny from all,避免语法错误 - 匹配的是“请求路径末尾的文件名”,不是磁盘绝对路径;
/api/v1/user.php和/user.php都只匹配user.php - 若同时存在多个 FilesMatch 块,按配置文件中出现顺序依次处理,后定义的可能覆盖前定义的权限

















