我在nginx
配置中使用以下 if 语句正则表达式来匹配和阻止请求 uri 中的一些错误请求。这些错误的查询总是只请求一个参数,但每次都使用随机名称(和字母计数)。他们也总是点击主页。
错误查询示例:
/?some1bad0query2=nminkvywbjfdysnvhp
if ($request_uri ~ "[\w]{5,25}\=[\w]{5,25}$") {
return 403;
}
如何修改此正则表达式以排除匹配某些参数名称,例如key
or query
(ie. /?query=somestring) ?
我尝试使用圆括号,?(!query)
但没有运气。
请帮我纠正这个正则表达式语句。提前致谢。
有两种方法可以做到这一点。使用否定的前瞻断言或使用
map
.例如:
的优点
map
是正则表达式按顺序计算,直到找到匹配项,因此可以避免复杂的前瞻表达式。例如:
该
map
块位于该块之外server
。如果该规则仅适用于以 开头的 URI/?
,则应将其添加到正则表达式中(如我的第二个示例所示)。