• 注册
  • 运维随笔 运维随笔 关注:339 内容:5

    nginx伪静态URL中含有问号?的正确匹配写法

  • 查看作者
  • 打赏作者
    • 年SVIP2
      靓号:9999
      宇宙最帅

      前言

      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或者疑问欢迎各路大神补充&指正

      请登录之后再进行评论

      登录
    • 发布
    • 做任务
    • 实时动态
    • 偏好设置
    • 帖子间隔 侧栏位置: