今天收到一个需求,要将一个带查询参数的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  # 跳转后
 
 

nginx配置url中带问号的rewrite跳转的更多相关文章

  1. 关于微信浏览不能URL传参,URL中的问号被删除

    关于微信浏览不能URL传参,URL中的问号被删除. 尼玛难道没有人遇到过这个问题?看了微信支付SDK3.0的代码,看到urlencode 看到了几次.实际上 在微信浏览器下 header('locat ...

  2. IE浏览器url中带中文报错的问题;以及各种兼容以及浏览器问题总结

    1.解决IE浏览器url带中文报错 /* encodeURI()解决IE浏览器请求url中带中文报错的问题 */ URL = encodeURI("<%=basePath%>ve ...

  3. nginx配置url重写

    url重写是指通过配置conf文件,以让网站的url中达到某种状态时则定向/跳转到某个规则,比如常见的伪静态.301重定向.浏览器定向等 rewrite 语法 在配置文件的server块中写,如: s ...

  4. ASP.NET MVC Url中带点号出现404错误的解决方案

    由于项目需求,项目的路由设计如下 config.Routes.MapHttpRoute( name: "Get/Put Sku", routeTemplate: "api ...

  5. URL中带加号的处理

    问题起因:      客户订购了一关键字为"e+h 变送器" , 在首页推荐广告中,会根据用户在search 搜索过的关键字进行一个匹配投放.技术实现是UED 通过JS 获取coo ...

  6. [故障引起的故事]URL中带加号的处理

    问题起因:      客户订购了一关键字为"e+h 变送器" , 在首页推荐广告中,会根据用户在search 搜索过的关键字进行一个匹配投放.技术实现是UED 通过JS 获取coo ...

  7. GBK 编码时 url 中带中文参数的问题

    项目中遇到的 GBK 编码问题,记录如下. 将代码精简为: <!DOCTYPE HTML> <html> <meta charset="gb2312" ...

  8. 获取url中带的参数

    本文目前只针对url中一个参数的 function getQueryString(name) { var reg = new RegExp("(^|&)" + name + ...

  9. js获取url 中的值,并跳转相应页面

    实现方法:一:获取URL带QUESTRING参数的JAVASCRIPT客户端解决方案,相当于asp的request.querystring,PHP的$_GET1.函数: <Script lang ...

随机推荐

  1. 深入理解nodejs的next函数。koa的使用 app.params的使用

    next就是一个递归函数 const Koa = require('koa'); const app = new Koa(); app.use(ctx => { ctx.body = 'Hell ...

  2. Visual Studio 2017 激活密钥 [复制记录]

    Visual Studio 2017(VS2017) 企业版 Enterprise 注册码:NJVYC-BMHX2-G77MM-4XJMR-6Q8QF Visual Studio 2017(VS201 ...

  3. 通过Oracle DUMP 文件获取表的创建语句

    1. 有了dump文件之后 想获取表的创建语句. 之前一直不知道 dump文件能够直接解析文件. 今天学习了下 需要的材料. dump文件, dump文件对应的schema和用户. 以及一个版本合适的 ...

  4. SQLserver 使用网络驱动器恢复数据库

    1. 公司内有多台虚拟机,因为公司提供出来的机器 硬盘总是不够大...所以想到了使用  映射网络驱动器的方式进行备份恢复工作. 学到的方法主要如下: 0. 首先打开sqlcmd 启动命令行界面 1. ...

  5. layer 中 的type和 content

    type - 基本层类型 类型:Number,默认:0 layer提供了5种层类型.可传入的值有:0(信息框,默认)1(页面层)2(iframe层)3(加载层)4(tips层). 若你采用layer. ...

  6. CRM模块

  7. AtCoder Beginner Contest 118 解题报告

    A - B +/- A #include <bits/stdc++.h> int main() { int a, b; std::cin >> a >> b; b ...

  8. SpringBoot基础入门

    1.SpringBoot核心相关内容 1.1入口类 SpringBoot通常有一个入口类*Application,内部有一个main方法,是启动SpringBoot的入口.使用@SpringBootA ...

  9. MySQL将一张表的某些列数据,复制到另外一张表,并且修改某些内容

    MySQL将一张表的某些列数据,复制到另外一张表 INSERT INTO t_topic_content(content,topicId) SELECT content,id FROM t_topi ...

  10. hdu5306 Gorgeous Sequence

    hdu5306 Gorgeous Sequence 题目大意 ​ 给你一个序列,维护区间和,区间chkmin和区间最大值 数据范围 数据组数T,序列长度n,操作次数m $T = 100,\sum n ...