删除nginx重写中的参数

时间:2012-03-09 22:01:43

标签: get nginx rewrite

我在重新启动后重写了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处理更多的值...任何想法?所有其他问题都涉及如何添加参数 - 我只想删除我的:)

5 个答案:

答案 0 :(得分:39)

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

  

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

因此,对于您的示例,这可以解决问题:

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

答案 1 :(得分:7)

从网址中删除参数,在本例中为coupon=xxx

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

请注意,如果是,则会删除所有参数 声明匹配。 $uri是没有参数的原始请求。

答案 2 :(得分:4)

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

set $args '';

答案 3 :(得分: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。服务器给出302响应,表明该URL是匹配的。

步骤2。客户重新发送带有新网址的请求(已删除参数)

答案 4 :(得分:0)

如果我们附加一个 ?到目的地的末尾,它将阻止查询被附加到目的地。 :)

<头>
示例 来源 参数 目的地
保持附加参数 重写^/mypage.php$ arg=something https://example.com/new-page/
不保留参数 重写^/mypage.php$ arg=something https://example.com/new-page/?