Nginx Rewrite 更改url参数

2020-12-01  本文已影响0人  阿当运维

需求:页面是nginx配置的反向代理,根据url匹配目录/abtest/ 轮询跳转a,b两个页面(显性跳转)。参数有cid , c3 ,c6 等。根据参数c6=a|b 更改其他参数如:cid 为指定数值
输入(2次):
192.168.1.252/abtest/lp1.html?cid=1&c3=2&c6=a
分别页面跳转到:
http://192.168.1.252/ab/a/lp1.html?cid=1&c3=2&c6=a ----》echo a
http://192.168.1.252/ab/b/lp1.html?cid=1&c3=2&c6=a-----》echo b

配置:
虚拟主机配置文件中加入(监听a页面的server段里):

    if ($query_string ~* "c6=a"){
            rewrite ^/(.*)  http://$host/ab/a/$1?cid=2&c3=$arg_c3&c6=$arg_c6? permanent;
        #   return 405;
    }

这里单纯是修改参数的部分。 $1是前面(.*)的值,如 域名 / 后输入的xxx.html。
$query_string 内置变量是url参数。
~* 正则匹配
$arg_参数名 接收源url参数的值 。
最后的? 号 表示不会再转发传递过来原地址的问号?后面的参数那部分,最后如果不加? 就会在更改完参数后,再次连上一段源地址的参数。
如:输入192.168.1.252/abtest/lp1.html?cid=1&c3=2&c6=a
按照以上配置应该跳转到http://192.168.1.252/ab/a/lp1.html?cid=2&c3=2&c6=a
$arg_参数名最后不加? 就会显示 http://192.168.1.252/ab/a/lp1.html?cid=2&c3=2&c6=a&cid=1&c3=2&c6=a

整体配置:

upstream abtest {
    server 127.0.0.1:9001 weight=9;
    server 127.0.0.1:9002 weight=1;
}

server {
    listen 9001;
    location / {
        index lp1.html;
        rewrite ^/(.*)  http://$host/ab/a/$1 redirect;
    }
    if ($query_string ~* "c6=a"){
            rewrite ^/(.*)  http://$host/ab/a/$1?cid=2&c3=$arg_c3&c6=$arg_c6? permanent;
        #   return 405;
    }
    
}

server {
        listen 9002;
        location / {
                index lp1.html;
        rewrite ^/(.*)  http://$host/ab/b/$1  redirect;
        }
    if ($query_string ~* "c6=b"){
                        rewrite ^/(.*)  http://$host/ab/b/$1?cid=3&c3=$arg_c3&c6=$arg_c6? permanent;
                #       return 405;
        }

}


server{
    listen 80;
    server_name 192.168.1.252;
    access_log /data/ab_acc.log;
    error_log /data/ab__err.log;
    location / {
        root /root/lp_2020/mywww;
        index index.html lp1.html;
    }
    location /abtest/ {
            proxy_pass http://abtest/;
            proxy_set_header Referer $http_referer;
            proxy_set_header Host $http_host;
            proxy_set_header X-Forwarded-For $remote_addr;
            proxy_set_header X-Forwarded-Host $server_name;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Scheme $scheme;
    }

}
上一篇下一篇

猜你喜欢

热点阅读