Nginx mod_rewrite $ request_uri操作

时间:2014-07-02 19:21:36

标签: mod-rewrite nginx

我想做一些重定向但涉及$args

我想尝试以下内容:

rewrite /aaa?a=1&aa=2 /bbb?b=1&bb=2 permanent;

但它不起作用。下面这行很好,但是

rewrite /aaa /bbb permanent;

我将这些行添加到配置文件中:

        proxy_set_header x-request_uri "$request_uri";
        proxy_set_header x-args "$args";

我可以看到这些标题:

GET /aaa?a=1&aa=2 HTTP/1.0
Host: www.example.com
x-request_uri: /aaa?a=1&aa=2
x-args: a=1&aa=2
Connection: close
User-Agent: curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.15.3 zlib/1.2.3 libidn/1.18 libssh2/1.4.2
Accept: */*

我做错了什么?有没有办法完成重定向考虑完整的$ request_uri?

1 个答案:

答案 0 :(得分:0)

我在irc.freenode.net #nginx上得到了答案:

mod_rewrite只与url-with-args不匹配,不使用if或map。

我设法使用if

if ( $request_uri = '/aaa?a=1&aa=2' ){
    return 301 $scheme://$host/bbb?b=1&bb=2;
}

响应标题:

< HTTP/1.1 301 Moved Permanently
< Server: nginx/1.0.15
< Date: Wed, 02 Jul 2014 20:05:34 GMT
< Content-Type: text/html
< Content-Length: 185
< Connection: keep-alive
< Location: http://www.example.com/bbb?b=1&bb=2
< x-uri: /aaa?a=1&aa=2