前言
nginx伪静态 URL中含有问号?该怎么匹配处理?
网页链接中带有问号(?)参数的写法
下面是带?错误的匹配示范
rewrite ^/go?id=yaolou$ https://yaolou.com;
这样规则的跳转起不了作用
方案
问号在nginx中是有特殊逻辑的,可以直接用 $query_string 来表示问号后面的字符
我这里提供两种方案:
$query_string :请求行中(GET请求)的参数,也就是查询参数
$request_uri :包含请求参数的原始URI,不包含主机名,如:”/go?id=yaolou”
第1种:
# 这里可以写正则匹配 if ( $query_string ~ "id=(.*)" ){ rewrite .* https://yaolou.com?; # 跳转后不带查询参数 }
第2种:
# 这里可以写正则匹配 if ( $request_uri ~ "/go?id=yaolou" ){ rewrite ^/(.*)$ https://yaolou.com?; # 跳转后不带查询参数 }
提示:rewrite url 后面为什么加了一个“?”
这样做的目的是为了去掉跳转传过来的查询参数,如果不加的话,那么跳转前后的url会是下面这个样子:
https://xxx.com/go?id=yaolou # 跳转前
https://yaolou.com?id=yaolou # 跳转后
说明
请根据自己实际情况做相应修改
如有什么BUG或者疑问欢迎各路大神补充&指正