Nginx中基于参数的重定向

我正在向一个 nginx 服务器发送像下面这样的 http 请求:

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

现在,我想根据请求中的 id 参数将请求重写到不同的处理程序。例如,将 even id 重定向到 handler_even,将 odd 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 参数值进行重定向。您有什么建议吗?使用 "if" 是最好的方法吗?

任何提示都会很有用。

点赞
用户4862445
用户4862445

相比于使用 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 容器内。

参见此文档了解详细信息。

2016-01-12 12:08:16