как использовать переменную внутри регулярного выражения nginx "if" - PullRequest
21 голосов
/ 02 мая 2011

У меня есть система кеширования, которую мне нужно обойти, если имя пользователя (в cookie) найдено в $ request_uri. Я пытаюсь сделать что-то вроде этого, но не могу заставить переменную интерполировать в регулярное выражение. Любые предложения, пожалуйста?

Я могу точно установить переменную $ me из cookie; Я просто не могу заставить его интерполировать в регулярное выражение.

set $chk == "need"; 
set $me "kevin"; 
if ($uri ~ $me) { set $chk ""; } 
if ($chk == "need") { rewrite ^ /testing }

Я всегда пробовал такие вещи:

if ($uri ~ "by-{$me}") { set $chk ""; }

Спасибо! * 1009 Кевин *

Ответы [ 2 ]

16 голосов
/ 02 мая 2011

Это не совсем то, что я спросил, но я думаю, что это сработает для моих целей.Мне все еще интересно, как интерполировать переменную в регулярном выражении nginx PCRE, если кто-нибудь еще знает!

set $chk == "need"; 
set $me "kevin"; 
if ($uri ~ /by-([^-]+)/) { set $by $1; }
if ($by = $me) {set $chk "";}
0 голосов
/ 11 октября 2017

Можно включить переменную в выражение регулярного выражения, просто поместив $ перед переменной ... нет необходимости делать $ {}

так что я полагаю в вашем случае

if ($uri ~ "by-$me") { set $chk ""; }

тогда регулярное выражение будет равно by-kevin

У меня было так для более сложного правила регулярных выражений

, где я хотел, чтобы orgin соответствовал списку возможных доменных имен

set $domainWhitelist "yahoo\.com|google\.com|foo\.com";
if ($http_origin ~* "https?://([\w-]*\.)*($domainWhitelist)(:\d+)?") {
...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...