如何在nginx服务器块中使用正则表达式获取参数?

时间:2016-09-06 22:03:14

标签: regex nginx server block

我正在尝试通过nginx服务器中的服务器块中的正则表达式获取一个参数(例如h = 1500),但它不起作用。我的最后一次尝试是这样的:

location ~ "^/app/events/(?<eventid>\d+)/(?<image>.+)?h=(?<height>\d+)$" { ...... }

您可以在这里查看并运行:https://regex101.com/r/kP9eY9/1

但是在我的服务器阻止文件中它不是。

如果我尝试这样的话,那就有效:

location ~ "^/app/events/(?<eventid>\d+)/(?<image>.+)/(?<height>\d+)$" { ...... }

而是像“h = 300”这样的参数,我只使用“/ 300”,我可以在服务器块文件中获取值。

我不是使用正则表达式的专家,所以我看不出有什么不对劲。我需要你的帮助!谢谢!

2 个答案:

答案 0 :(得分:2)

来自the documentation

  

所有类型的位置仅测试请求行的URI部分   参数

表示?及其后的任何内容。

答案 1 :(得分:0)

正如@Richard所说,你不能在regexps的位置使用请求参数。

如果您需要在nginx配置中使用请求参数,可以使用 $ arg _ 和/或 $ args 语法:

http://nginx.org/en/docs/http/ngx_http_core_module.html#var_arg_ http://nginx.org/en/docs/http/ngx_http_core_module.html#var_args

location / {
  if ($arg_param = 'someval') {
     # some code here
  }
}