1. 程式人生 > >帶問號的url重定向和引數保留--nginx rewrite

帶問號的url重定向和引數保留--nginx rewrite

栗子:

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;