Nginx location正则规则未匹配目标URL的问题求助
问题根因
Nginx的location匹配规则仅对URL中域名后的路径部分生效,?及之后携带的查询参数(query string)不会参与location匹配。
你写的正则规则^(.*)event(.*)$语法本身没有问题,作用是匹配路径任意位置包含event的请求,但你测试用的URLaaa.com/index.php?r=event/indexpage&a=1&b=2,实际参与location匹配的路径只有/index.php,event字符串存在于查询参数r的取值中,完全不会进入location的匹配校验流程,因此规则无法命中。
修复方案
根据实际匹配需求二选一即可:
- 匹配查询参数中携带
event的请求
不要在location的路径匹配规则中写event相关正则,改为在对应location块内通过内置变量$query_string判断参数内容,参考配置:
这种简单的变量正则匹配判断不会有已知的逻辑问题,可以放心使用。# 如果只需要匹配index.php入口的请求,就把下面的/改成/index.php location / { # 检测查询参数中是否包含event字符串 if ($query_string ~ "event") { return 777; } # 此处保留原有的请求处理逻辑,比如静态资源规则、PHP FastCGI转发配置等 } - 匹配路径段中携带
event的请求(比如aaa.com/event/list这类URL格式)
你原有的location正则写法可以正常生效,只是当前测试用的URL把event放在了查询参数里,不符合匹配要求,将URL调整为路径段携带event的格式即可命中规则。
内容的提问来源于stack exchange,提问作者Xuan
相关产品推荐
相关产品推荐

