Remove parameters within nginx rewrite

前端 未结 4 1924
春和景丽
春和景丽 2020-12-09 09:09

I\'m rewriting URLs in nginx after a relaunch. In the old site I had query parameters in the URL to filter stuff e.g.

http://www.example.com/mypage.php?type=         


        
相关标签:
4条回答
  • 2020-12-09 09:50

    To drop a parameter from a URL, in this case coupon=xxx:

    if ($query_string ~ "^(.*)coupon=(.*)$") {
        rewrite ^(.*)$ $uri? permanent;
    }
    

    Note that this will drop all parameters if the statement matches. $uri is the original request without parameters.

    0 讨论(0)
  • 2020-12-09 09:54

    Had a similar problem, after a lot of searching the answer presented itself in the rewrite docs.

    If you specify a ? at the end of a rewrite then Nginx will drop the original $args (arguments)

    So for your example, this would do the trick:

    location ^~ /mypage.php {
        rewrite ^/mypage.php$ http://www.example.com/mypage? permanent;
    }
    
    0 讨论(0)
  • 2020-12-09 09:54

    Try setting the $args variable to empty inside the location.

    set $args '';
    
    0 讨论(0)
  • 2020-12-09 10:08

    If you want to remove a specified parameter from url,

    #  in location directive: 
    if ($request_uri ~ "([^\?]*)\?(.*)unwanted=([^&]*)&?(.*)") {
        set $original_path $1; 
        set $args1 $2; 
        set $unwanted $3; 
        set $args2 $4; 
        set $args ""; 
    
        rewrite ^ "${original_path}?${args1}${args2}" permanent;
    }
    

    then visit your_site.com/a=1&unwanted=2&c=3

    step1. server gives an 302 response, indicating the url is match.

    step2. client re-send a request with the new url ( with the parameter removed)

    0 讨论(0)
提交回复
热议问题