16

The location from nginx conf:

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

How to I get variables from location in nginx?

3 Answers 3

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

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.

2
  • 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, 2018 at 8:46
  • 2
    I think you can just write (?<width>\d+) instead of (?<width>(\d+)), or is there some other reason for this -- perhaps to also get $1 as well as $width ? May 2, 2018 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;
}

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .