删除nginx重写中的参数

问题描述 投票:19回答:4

我重新启动后在nginx中重写URL。在旧网站中,我在网址中有查询参数来过滤内容,例如

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

新页面没有这些参数。我想删除它们并将URL重写到主页面,以便我得到:

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

我在nginx中的重写规则是:

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

但是使用此规则,参数仍会附加。我认为$会阻止nginx处理更多的价值......任何想法?所有其他问题都涉及如何添加参数 - 我只想删除我的:)

get nginx rewrite
4个回答
39
投票

有一个类似的问题,经过大量的搜索后,答案出现在rewrite docs

如果你指定一个?在重写结束时,Nginx将删除原始的$ args(参数)

所以对于你的例子,这可以做到这一点:

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

7
投票

要从URL中删除参数,在本例中为coupon=xxx

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

请注意,如果语句匹配,这将删除所有参数。 $uri是没有参数的原始请求。


4
投票

尝试将$args变量设置为在该位置内清空。

set $args '';

1
投票

如果要从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;
}

然后访问your_site.com/a=1&unwanted=2&c=3

步骤1。 server给出302响应,表示url匹配。

第2步。客户端使用新网址重新发送请求(删除参数)

© www.soinside.com 2019 - 2024. All rights reserved.