栗子:
http://host/demo/sub/z10?x=95&y=27=>http://host/demo/sub/10/95_27.png
问题:
1、重定向前url带有问号,且需要保留问号后的参数;
2、重定向后的参数以下划线连接。
解决:
http://host/demo/sub/z10?x=95&y=27=>http://host/demo/sub/10/95/27=>http://host/demo/sub/10/95_27.png
1、nginx rewrite正则匹配不会匹配问号后的参数,因此需要使用$arg_{参数名}来保留参数,且匹配规则要以问号结尾;
但如果直接重定向到最终结果,两个参数之间用下划线连接,会造成参数解析错误,因此第一步先去掉问号,生成中间结果:
rewrite ^/(\w+)/(\w+)/z(\d+) /$1/$2/$3/$arg_x/$arg_y? permanent;
2、第一步重定向去掉了问号,下面只需要正则匹配参数就ok了:
rewrite ^/(\w+)/(\w+)/(\d+)/(\d+)/(\d+) /$1/$2/$3/$4_$5.png permanent;