如何在nginx“if”正则表达式中使用变量

时间:2011-05-02 16:43:32

标签: regex nginx

如果在$ request_uri中找到用户的名字(在cookie中),我需要绕过一个缓存系统。我试图做这样的事情,但不能让变量插入正则表达式。有什么建议吗?

我可以从cookie中设置$ me变量;我只是无法将其插入到正则表达式中。

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

我总是尝试这样的事情:

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

谢谢! -Kevin

2 个答案:

答案 0 :(得分:16)

这不完全是我的要求,但我认为这对我的目的有用。如果有其他人知道的话,我仍然很好奇如何在nginx PCRE正则表达式中插入一个变量!

set $chk == "need"; 
set $me "kevin"; 
if ($uri ~ /by-([^-]+)/) { set $by $1; }
if ($by = $me) {set $chk "";}

答案 1 :(得分:-1)

可以在变量表达式中加入变量,只需将$放在变量前面......不需要执行$ {}

所以我想你的情况

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

正则表达式将等于by-kevin

对于更复杂的正则表达式规则,我已经有了这样的工作

我希望orgin匹配可能的域名列表

set $domainWhitelist "yahoo\.com|google\.com|foo\.com";
if ($http_origin ~* "https?://([\w-]*\.)*($domainWhitelist)(:\d+)?") {
...
}