美文网首页
Nginx Rewrite 更改url参数

Nginx Rewrite 更改url参数

作者: 阿当运维 | 来源:发表于2020-12-01 10:40 被阅读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;
        }
    
    }
    

    相关文章

      网友评论

          本文标题:Nginx Rewrite 更改url参数

          本文链接:https://www.haomeiwen.com/subject/vmgjwktx.html