我正在尝试设置一个 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 文档它们是相同的)检查 URL 是否有查询请求。但我发现$args
(或 $query_string
)只有 &
之前的内容.在我的例子中,这意味着
$args = paraA=10
. &
后我无法获取参数内容.我通过将级别设置为调试的 nginx 错误日志来确定这一点。知道为什么我在
&
之后无法获取查询参数吗?在变量 $args
或 $query_string
?
最佳答案
您需要使用 $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;
}
}
关于url - 为什么 $args 或 $query_string 在 & 之后不包含查询参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46516307/