为什么Nginx变量$ args或$ query_String在&之后不包含查询参数?

bud*_*dha 4 url nginx url-rewriting query-string

我正在一个项目中,我需要设置nginx重写规则来修改带有查询请求的url。例如:

www.abc.com/pathA/pathB/script.pl?paraA=10¶B=20
将被重写为:www.abc.com/pathA/pathB/script.pl.1020

我尝试使用变量$ args或$ query_string(基于nginx doc,它们相同)来检查url是否具有查询请求,因为我要重写。但是我发现$ args(或$ query_string)仅包含&之前的内容。

在我的示例中,这意味着$ args = paraA = 10。&之后,我无法获取参数内容。我确定此Nginx错误日志,并将其设置为调试级别。

知道为什么我在变量$ args或$ query_string中&之后无法获取查询参数吗?

先谢谢了。

bud*_*dha 9

问题不是由nginx配置文件引起的。这是因为我在使用 curl 发送请求时忘记了双引号。例如: curl "www.abc.com/pathA/pathB/script.pl?paraA=10¶B=20" 没有双引号,"¶B=20" 永远不会被实际发送。


Tar*_*ani 6

您需要使用 $arg_<argname>

www.abc.com/pathA/pathB/script.pl?paraA=10¶B=20将被重写为:www.abc.com/pathA/pathB/script.pl.1020

下面是执行此操作的示例配置

location /pathA/pathB/script.pl {
    set $need_redirect "";
    if ($arg_paraA) {
       set $need_redirect "A";
    }

    if ($arg_paraB) {
       set $need_redirect "B$need_redirect";
    }

    if ($need_redirect = "BA") {
       rewrite ^(.*)$ $1.$arg_paraA$arg_paraB;
    }
}
Run Code Online (Sandbox Code Playgroud)