Nginx重定向特定的参数列表

时间:2017-03-16 19:57:45

标签: nginx nginx-location

我在URL中列出了一些过时的参数。

arg1
arg2
arg3
...
argn

我需要将链接查询部分中任何这些参数的任何请求重定向到特定网站。

/page.html?arg1=sxx&arg2=uuu  -> http://xxx.x.xxx.x
/page.php?arg3=  -> http://xxx.x.xxx.x
/dir/dir/page/?arg2=111&& argn=xyyyy  -> http://xxx.x.xxx.x
/page.html (is not redirected but matched to other existing rules in nginx)

知道怎么表达得很好吗?由于某些原因,location没有正则表达式匹配的参数。

1 个答案:

答案 0 :(得分:1)

假设参数顺序是确定性的,您可以针对$ request_uri变量测试多个正则表达式。

map指令可用于列出多个规则和目的地。

例如:

map $request_uri $redirect {
    default                          0;
    ~^/page\.html\?arg1=sxx&arg2=uuu http://xxx.x.xxx.x;
    ~^/page\.php\?arg3=              http://xxx.x.xxx.x;
    ...
}

server {
    ...
    if ($redirect) {
        return 301 $redirect;
    }

您当然希望通过插入间隙(.*)和字边界(\b)来改进上面的正则表达式。

map指令见this documentif使用this note