如何在nginx重写规则输出中转义"?"



我正在尝试在nginx中反向代理,将像" /a/b?page=2"这样的前端页面重写为后端请求以" /a/b%3fpage=2

我不知道如何让nginx发出包含" %3f"的反向代理请求。

使用以下配置:

rewrite ^/one$ /a%3fb;
rewrite ^/two$ /a?b;
rewrite ^/three$ /a?b;
  • /one发出类似GET /a%253fb HTTP/1.0的后端请求
  • /two发出类似GET /a?b HTTP/1.0的后端请求
  • /three发出后端请求,例如GET /a?b HTTP/1.0

如何获得像GET /a%3fb HTTP/1.0这样的后端请求?

感谢@Richard Smith的评论,我能够使用以下代码针对我的特定情况解决此问题:

location / {
  set $backend_uri $request_uri;
  if ($args ~* "page=(d+)") {
    set $page $1;
    set $backend_uri $uri%3fpage=$1;
  }
  proxy_pass http://example.com$backend_uri;
}

我认为我也可以使用 lua 重写指令做一些更通用的事情,但我无法在 Amazon Linux 2 机器上安装 mod-lua,请参阅 https://serverfault.com/questions/961337/how-to-install-nginx-mod-lua-on-amazon-linux-2

最新更新