nginx 重写整个 url,结合使用 proxy_pass 和 rewrite

首先讲下需求背景

需要将相同url 不同参数的地址转发到服务器上不同的地址

举例: example1.com/api.php?act=order ->example2.com/api/pay/order

example1.com/api.php?act=pay ->example2.com/api/pay/pay

 

nginx配置如下

location ^~ /api.php
                {
			proxy_next_upstream http_502 http_504 error timeout invalid_header;
                        proxy_set_header Host  $host;
                        proxy_set_header X-Real-IP $remote_addr;
                        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                        if ( $query_string ~* ^(.*)act=order\b(.*)$ ){
                        	rewrite ^/api.php(.*)$ /api/pay/order/$1 break; //这边就是替换  参考 https://www.cnblogs.com/stxz/p/16457510.html
         			proxy_pass http://example2.com; 
       			}

                }

  红色标出的坑点:如果你的路由全部替换的话api.php后面的/是必须去掉的  不然替换的时候会多个/

posted @ 2023-01-31 23:28  lotusnono  阅读(472)  评论(0编辑  收藏  举报