Nginx用参数重写url而不改变url

zkure5ic  于 2023-10-17  发布在  Nginx
关注(0)|答案(1)|浏览(150)

我使用Nginx作为代理服务器,并希望使用某些用户友好的URL与参数proxypass/重写到另一个URL与各自的参数。
我希望从这个URL:www.mydomain.com/report/bill/p1/p2/p3/p4使用此http://192.168.0.1:9002/reports/servlet?param1=$p1&param2=$p2&param3=$p3&param4=$p4
我试了下面的方法,没有成功

location /report/bill/ {
    rewrite ^/report/bill/(.*)$ $1 break;
    rewrite ^/report/bill/(.*)/(.*)$ $2 break;
    rewrite ^/report/bill/(.*)/(.*)/(.*)$ $3 break;
    rewrite ^/report/bill/(.*)/(.*)/(.*)$/(.*)$ $4 break;
    proxy_pass http://192.168.0.1:9002/reports/servlet?param1=$1&param2=$2&param3=$3&param4=$4;
}
k2arahey

k2arahey1#

你误解了rewrite的工作原理。
但是,rewrite能够在一个语句中完成您想要的所有操作:

rewrite ^/report/bill/(.*)/(.*)/(.*)/(.*)$ /reports/servlet?param1=$1&param2=$2&param3=$3&param4=$4 break;
proxy_pass http://192.168.0.1:9002;

我可能不会使用(.*)进行捕获,因为它捕获了包括/ s在内的所有内容。您可以使用([^/]+),它将捕获两个/之间的所有内容。

相关问题