15

The location from nginx conf:

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

How to I get variables from location in nginx?

Sathyajith Bhat
  • 61,504
  • 38
  • 179
  • 264
satels
  • 272
  • 1
  • 2
  • 7

3 Answers3

21

The regex works pretty much like in every other place that has it.

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

Looking at examples on the nginx wiki may also help, http://wiki.nginx.org/Configuration

Nexerus
  • 846
  • 2
  • 9
  • 12
17

In addition to the previous answers, you can also set the names of the regex captured groups so they would easier to be referred later;

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

see NGINX: check whether $remote_user equals to the first part of the location for an example of usage.

dawez
  • 591
  • 5
  • 8
  • This is apparently necessary, if there's also another *nested* location with another regex and regex capture groups. Because inside that other location, `$1 $2 $3` etc will refer to values from the nested regex, overwriting the `$1 $2 ...` in the outer regex. An `alias /$1` in the *outer* regex, will use the `$1` from the *inner* regex, which likely results in file-not-found. – KajMagnus Apr 15 '18 at 08:46
  • 2
    I think you can just write `(?\d+)` instead of `(?(\d+))`, or is there some other reason for this -- perhaps to also get `$1` as well as `$width` ? – Cameron Kerr May 02 '18 at 18:05
4

You may try this:

location ~ ^/photos/resize/.+ {
    rewrite ^/photos/resize/(\d+)/(\d+) /my_resize_script.php?w=$1&h=$2 last;
}
bearcat
  • 141
  • 2