我重新启动后在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处理更多的价值......任何想法?所有其他问题都涉及如何添加参数 - 我只想删除我的:)
有一个类似的问题,经过大量的搜索后,答案出现在rewrite docs。
如果你指定一个?在重写结束时,Nginx将删除原始的$ args(参数)
所以对于你的例子,这可以做到这一点:
location ^~ /mypage.php {
rewrite ^/mypage.php$ http://www.example.com/mypage? permanent;
}
要从URL中删除参数,在本例中为coupon=xxx
:
if ($query_string ~ "^(.*)coupon=(.*)$") {
rewrite ^(.*)$ $uri? permanent;
}
请注意,如果语句匹配,这将删除所有参数。 $uri
是没有参数的原始请求。
尝试将$args
变量设置为在该位置内清空。
set $args '';
如果要从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步。客户端使用新网址重新发送请求(删除参数)