如何在Vercel防火墙自定义规则中正确拦截所有*.php请求?
解决Vercel防火墙拦截PHP请求无日志、仍计有效流量的问题
核心问题根源
你之前的规则要么未指定**请求路径(Request Path)**这个精准匹配字段,要么匹配语法不符合Vercel防火墙的规则要求,导致拦截行为未被防火墙系统追踪,反而被判定为常规边缘请求。
正确的PHP请求拦截规则配置
以下是两种经过验证的有效规则,直接复制配置即可:
规则1:精准拦截所有.php结尾的请求(推荐)
- 匹配类型:
matches - 目标字段:
Request Path - 匹配值:
\.php$ - 执行动作:
Deny
正则说明:
\.转义匹配点号(避免正则中.匹配任意字符),$匹配路径结尾,确保只拦截真正以.php收尾的请求,比如/test.php、/api/login.php都会被拦截,不会误判/php-docs这类不含后缀的路径。
规则2:扩展拦截PHP衍生后缀请求
如果需要同时拦截.php5、.phtml这类PHP相关后缀,可使用:
- 匹配类型:
matches - 目标字段:
Request Path - 匹配值:
\.(php\d?|phtml)$ - 执行动作:
Deny
之前规则无效的原因解析
request -> contains -> '/[slug].php':[slug]是Next.js的路由占位符,Vercel防火墙不识别该语法,只会当作普通字符串匹配,仅拦截路径包含/[slug].php的请求,完全不符合需求。request -> contains -> '/*.php':contains匹配中*是普通字符,不是通配符,只会拦截路径包含/*.php的请求,几乎不会触发。- 正则规则错误:你之前的正则存在空格(
phtml中的空格)、未转义点号(.在正则中匹配任意字符),且未指定匹配Request Path字段,导致防火墙在整个请求内容中匹配,而非仅路径。
验证规则有效性
配置后按以下步骤确认:
- 浏览器访问
你的域名/任意名称.php,应返回403 Forbidden。 - 查看Vercel防火墙日志,该请求会被标记为
Blocked,并关联你配置的规则名称。 - 观察边缘请求统计,这类PHP请求不再计入有效请求量。
额外优化:拦截WordPress扫描流量
配合以下规则,进一步减少机器人扫描:
- 规则:
Request Path->contains->/wp-admin->Deny - 规则:
Request Path->contains->/wp-includes->Deny
内容的提问来源于stack exchange,提问作者Earl
相关产品推荐
相关产品推荐

