Как получить переменные из локации в nginx?


12

Расположение из nginx conf:

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

Как получить переменные из локации в nginx?

Ответы:


17

Регулярное выражение работает почти так же, как и в любом другом месте, где оно есть.

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

Просмотр примеров на вики-сайте nginx также может помочь, 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с внутренней регулярных выражений, что , вероятно , приводит к файлу-не-найдено.
КаджМагнус

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;
}
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.