nginx中基于参数的重定向

时间:2016-01-12 11:07:12

标签: redirect nginx lua proxypass

我有一些http请求,例如下面的请求被发送到nginx服务器:

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

现在,我想根据请求中的id参数将请求重写到不同的处理程序。例如。对于奇数ids,重定向到甚至ids的handler_even和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参数值重定向。知道我怎么能这样做吗?使用“if”是最好的方法吗?

任何指针都很有用

1 个答案:

答案 0 :(得分:0)

您可以使用if,而不是使用map指令。要在内部重写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

相关问题