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