Remove parameters within nginx rewrite

2019-02-08 07:13发布

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

The new page doesn't have these kind of parameters. I want to remove them and rewrite the URLs to the main page, so that I get:

http://www.example.com/mypage/

My rewrite rule in nginx is:

location ^~ /mypage.php {
    rewrite ^/mypage.php$ http://www.example.com/mypage permanent;
}

But with this rule the parameter is still appended. I thought the $ would stop nginx from processing further values... any ideas? All other questions deal with how to add parameters - I just want to remove mine :)

3条回答
萌系小妹纸
2楼-- · 2019-02-08 07:28

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.

查看更多
倾城 Initia
3楼-- · 2019-02-08 07:39

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

set $args '';
查看更多
我欲成王,谁敢阻挡
4楼-- · 2019-02-08 07:47

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;
}
查看更多
登录 后发表回答