今天收到一个需求,要将一个带查询参数的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. php多进程pcntl学习-僵尸进程

    上个月写的文章,php多进程pcntl学习(一)现在发现并不完整,因为虽然提到了关闭子进程,但是并没有回收子进程,简单的说就是当子进程比父进程先退出,而父进程没对其做任何处理的时候,子进程将会变成僵尸 ...

  2. zabbix 使用问题两个--中文乱码,以及监控ESXi下的虚拟机

    1. 中文乱码 最开始中文显现 长方形不显示文字.解决办法: c:\windows\fonts 下面复制 楷体的字体(字体随意看自己喜欢) 文件名一般为: simkai.ttf 2.将simkai.t ...

  3. java List<String>的初始化

    今天在处理生成excel的时候用到了java的list,但是需要直接赋值固定的几个变量,如果先初始化然后add的方法: List<String> name = new ArrayList( ...

  4. SpringMVC @RequestBody的使用

    @RequestBody的作用 @RequestBody用于读取Request请求的body数据,然后利用SpringMVC配置的HttpMessageConverter对数据进行转换,最后把转换后的 ...

  5. python之字典操作

    字典操作代码如下: #数据字典操作汇总 person = {'name': 'Mike', 'age': 25} print("初始的数据字典:", person) #访问字典值 ...

  6. mybatis model属性注入多个对象 与model属性注入单个对象

  7. 简单易懂的博弈论讲解(巴什博弈、尼姆博弈、威佐夫博弈、斐波那契博弈、SG定理)

    博弈论入门: 巴什博弈: 两个顶尖聪明的人在玩游戏,有一堆$n$个石子,每次每个人能取$[1,m]$个石子,不能拿的人输,请问先手与后手谁必败? 我们分类讨论一下这个问题: 当$n\le m$时,这时 ...

  8. Educational Codeforces Round 3 C. Load Balancing

    C. Load Balancing time limit per test 2 seconds memory limit per test 256 megabytes input standard i ...

  9. 自学Zabbix11.5 Zabbix SNMP监控实例

    点击返回:自学Zabbix之路 点击返回:自学Zabbix4.0之路 点击返回:自学zabbix集锦 自学Zabbix11.5 Zabbix SNMP监控实例-监控网络设备内存使用情况 1. zabb ...

  10. poj3114 Contries in War (tarjan+dijkstra)

    缩完点后对每次询问做dijkstra即可 #include<cstdio> #include<cstring> #include<algorithm> #inclu ...