Подтвердить что ты не робот

Захват переменной в сопоставлении местоположения Nginx

Скажем, у меня есть такой URL: www.example.com/a/b/sth, и я пишу блок местоположения в конфигурации Nginx:

location ^~ /a/b/(?<myvar>[a-zA-Z]+) {
    # use variable $myvar here
    if ($myvar = "sth") { ... }
}

Я надеюсь, что сможет использовать переменную $myvar, захваченную из URL-адреса внутри блока, однако Nginx продолжает сообщать мне, что эта переменная не определена и не запускается:

nginx: [emerg] unknown "myvar" variable
4b9b3361

Ответ 1

Именованные захваты - это функция PCRE, и они имеют различный синтаксис, доступные в разных версиях. Для синтаксиса, который вы используете ?<var>, вы должны иметь PCRE 7.0 по крайней мере.

Пожалуйста, ознакомьтесь с обширной информацией в официальной документации Nginx

Ответ 2

Старый поток, но у меня была та же проблема...

Я думаю, что ошибка не связана с установленной версией PCRE

NGINX не анализирует ваше регулярное выражение, если тэг местоположения не начинается с ~ Вам нужно использовать что-то вроде этого

location ~ ^/a/b/(?<myvar>[a-zA-Z]+) {
   # use variable $myvar here
   if ($myvar = "sth") { ... }
}

Ответ 3

^ ~ не соответствует регулярному выражению, он содержит самый длинный совпадающий префикс. вы должны использовать ~ или ~ * (case insenstive) вместо

Ответ 4

Неподтвержденный, но правильный способ захвата блока в именованную переменную с помощью PCRE - (? P). Таким образом, ваш пример пропускает P.