首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在nginx "if“正则表达式中使用变量

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

Stack Overflow用户
提问于 2011-05-03 00:43:32
回答 2查看 69.8K关注 0票数 31

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

我可以从cookie中很好地设置$me变量;我只是不能让它插入到正则表达式中。

代码语言:javascript
复制
set $chk == "need"; 
set $me "kevin"; 
if ($uri ~ $me) { set $chk ""; } 
if ($chk == "need") { rewrite ^ /testing }

我一直在尝试这样的事情:

代码语言:javascript
复制
if ($uri ~ "by-{$me}") { set $chk ""; }

谢谢!-Kevin

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-05-03 00:51:24

这并不完全是我所要求的,但我认为它可以达到我的目的。我仍然很好奇如何在nginx PCRE正则表达式中插入变量,如果其他人知道的话!

代码语言:javascript
复制
set $chk == "need"; 
set $me "kevin"; 
if ($uri ~ /by-([^-]+)/) { set $by $1; }
if ($by = $me) {set $chk "";}
票数 25
EN

Stack Overflow用户

发布于 2017-10-11 22:10:44

只需将$放在变量前面,就可以将变量合并到regex表达式中。无需执行${}操作

所以我想在你的情况下

代码语言:javascript
复制
if ($uri ~ "by-$me") { set $chk ""; }

正则表达式将等于by-kevin

对于更复杂的正则表达式规则,它的工作方式如下所示

我想让orgin匹配一个可能的域名列表

代码语言:javascript
复制
set $domainWhitelist "yahoo\.com|google\.com|foo\.com";
if ($http_origin ~* "https?://([\w-]*\.)*($domainWhitelist)(:\d+)?") {
...
}
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5859848

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档