nginx配置url中带问号的rewrite跳转

该博客内容为转载,转载地址为https://www.cnblogs.com/resn/p/10563345.html ,原标签为运维。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

转载于:https://www.cnblogs.com/resn/p/10563345.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值