【问题标题】:Parameter based redirect in nginxnginx中基于参数的重定向
【发布时间】:2016-04-16 23:17:44
【问题描述】:

我有如下的 http 请求被发送到 nginx 服务器:

GET /app/handler?id=1234&param1=cbd&param2=234

现在,我想根据请求中的 id 参数将请求重写为不同的处理程序。例如。偶数 id 重定向到 handler_even ,奇数 id 重定向到 handler_odd 。如下所示:

GET /app/handler?id=1234&param1=cbd&param2=234 => /app/handler_even?id=1234&param1=cbd&param2=234
GET /app/handler?id=123&param1=cbd&param2=234 => /app/handler_odd?id=123&param1=cbd&param2=234

我可以使用 proxy_pass 进行重写,但我不确定如何使用 id 参数值进行重定向。知道我该怎么做吗?使用“如果”是解决此问题的最佳方式吗?

任何指针都会很有用

【问题讨论】:

  • 重定向还是重写?
  • 重写。更改了问题以反映这一点。最终用户永远不知道他/她被重定向到哪个处理程序。

标签: redirect nginx lua proxypass


【解决方案1】:

您可以使用map,而不是使用if 指令。要在内部重写 URI,请使用:

map $arg_id $handler {
    default /app/handler_even;
    ~[13579]$ /app/handler_odd;
}

server {
    ...
    location = /app/handler {
        rewrite ^ $handler last;
    }
    ...
}

map 应与您的 server 指令位于同一级别(如上所示),即在 http 容器内。

详情请见this document

【讨论】:

    猜你喜欢
    • 2014-04-07
    • 2019-04-17
    • 1970-01-01
    • 2014-03-08
    • 2022-09-28
    • 2021-09-21
    • 2011-09-30
    • 2021-07-29
    • 1970-01-01
    相关资源
    最近更新 更多