在 Nginx 的 request_uri 中使用多个变量

各位程序员早上好,我想保护一个文件,为此我只想允许我定义的 request_uri。例如:

if ($request_uri !~* "d=123&y=456") {
    return 403;
}

在这种情况下,这个示例是有效的,但我想做一些类似于这样的事情:

set $test1 123;
set $test2 456;

if ($request_uri !~* "d=$test1&y=$test2") {
    return 403;
}

所以我想通过变量来实现,这是否可能?因为我已经测试了很多示例,但它们都没有起作用。

附言:我正在使用 OpenResty(Nginx+Lua),因此我也接受 Lua 解决方案。

按要求: 我记不得我尝试了什么,因为我试过很多代码,但我可以告诉你一件有效的事情:

set $teste 123;
if ($request_uri ~* "[?&]d=([^&]*)") { set $d $1; }
if ($d != $teste) {
    return 403;
}

这个句子的唯一问题是它只验证了 d=,但我也希望它验证 y=,我可以做另一个 if,但我还想使用 d=y= 以及同一个句子而不是使用多个 Ifs。无论如何,这个句子还有另一个问题,我不能将 $d != $teste 更改为 $d !~* $teste,它简单地停止工作,我需要使用 !~*,最后我可以使用多个 ifs,但由于我不能使用 !~*,所以它将不起作用。

点赞
用户4862445
用户4862445

正则表达式是一个字符串字面量,不能包含变量。相对地,您可以使用以下代码实现相同的逻辑:

set $test1 123;
set $test2 456;

if ($arg_d != $test1) { return 403; }
if ($arg_y != $test2) { return 403; }
2020-07-18 07:27:19