zoukankan      html  css  js  c++  java
  • nginx配置url中带问号的rewrite跳转

    今天收到一个需求,要将一个带查询参数的url跳转到另外一个静态url,安装常规的rewrite规则,如:
    rewrite ^/a.html?id=67$ http://zt.epython.cn/20190320/b.html;  错误的示范
     
    这样的跳转起不了作用,因为nginx会把后面的一整串都认为是URL,但是在浏览器上去,只会访问到a.html这个文件.
    然后google了一下,发现问号在nginx中是有特殊作用的,那我们就需要使用其他的方法了。在查询nginx的参数的时候,发现了$query_string 和 $request_uri 两个参数。
    $query_string  :请求行中(GET请求)的参数,也就是查询参数;
    $request_uri    :包含请求参数的原始URI,不包含主机名,如:"/a.html?id=67",不能修改。
    那么我们可以想到两种配置方法
    第一种: 
    if ( $query_string ~ “id=(.*)” )  # 这里写可以正则
       {
       rewrite ^/css/style.css http://www.epython.cn/?;  # 这里必须要加问号,否则会出现 跳转次数过多的问题
       }
     
     
    第二种
    if ( $request_uri ~ “/a.html?id=67" )
       {
       rewrite ^/(.*)$ http://zt.epython.cn/20190320/b.html?;  # 跳转后不带查询参数
       }
     
    # 直接跳转 ;
    if ( $request_uri ~ "/(.*).html?id=epython" )
       {
       rewrite ^/(.*).html /css/style.css;
       }
    #
     
     
    需要注意的是,这里 在rewrite后的url 最后添加了一个问号,这样做的目的是为了去掉跳转后 url后的传过来的查询参数;如果不加的话,那么跳转前后的url会是下面的样子:
    https://h5.epython.cn/a.html?id=67        # 跳转前
    http://zt.epython.cn/20190320/b.html?id=67  # 跳转后
     
     
  • 相关阅读:
    黑产江湖
    FW/IDS/IPS/WAF等安全设备部署方式及优缺点
    SOAPA来临,SIEM时代终结?
    美国爱因斯坦计划4
    零基础如何学好安卓开发
    协同办公系统能为企业带来怎样的影响?
    阿里腾讯开撕,钉钉的广告打到腾讯的地盘了
    bug管理工具为开发者工作带来哪些改变?
    开发人员必备的几款bug管理工具
    教你玩转产品管理系统iClap(PC端功能篇)
  • 原文地址:https://www.cnblogs.com/resn/p/10563345.html
Copyright © 2011-2022 走看看