如何从nginx中的位置获取变量?


12

来自nginx conf的位置:

location ~/photos/resize/(\d+)/(\d+) {
    # Here var1=(\d+), var2=(\d+)
}

如何从nginx中的位置获取变量?

Answers:


17

正则表达式的工作原理与在其他所有拥有此表达式的地方非常相似。

location ~/photos/resize/(\d+)/(\d+) {
  # use $1 for the first \d+ and $2 for the second, and so on.
}

查看nginx Wiki上的示例也可能会有所帮助,http://wiki.nginx.org/Configuration


11

除了前面的答案外,您还可以设置正则表达式捕获组的名称,以便以后参考。

location ~/photos/resize/(?<width>(\d+))/(?<height>(\d+)) {
  # so here you can use the $width and the $height variables
}

参见NGINX:查看$ remote_user是否等于位置的第一部分,以获取用法示例。


如果还有另一个嵌套的位置带有另一个正则表达式和正则表达式捕获组,则这显然是必要的。因为在其他位置$1 $2 $3等内部将引用嵌套正则表达式中的值,因此将覆盖$1 $2 ...外部正则表达式中的。一个alias /$1外部正则表达式,将使用$1内部正则表达式,这可能导致文件未找到。
KajMagnus

1
我想你可以随便写(?<width>\d+)的,而不是(?<width>(\d+)),或有一些其他原因-或许也得到$1以及$width
卡梅隆·克尔

2

您可以尝试以下方法:

location ~ ^/photos/resize/.+ {
    rewrite ^/photos/resize/(\d+)/(\d+) /my_resize_script.php?w=$1&h=$2 last;
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.