如何在nginx配置url中带问号的参数301 rewrite跳转

235 views次阅读
没有评论

今天收到一个需求,要将一个带查询参数的url跳转到另外一个静态url,安装常规的rewrite规则,如:rewrite ^/a.html?id=67$ http://zt.epython.cn/20190320/b.html;  错误的示范

如何在nginx配置url中带问号的参数301 rewrite跳转

这样的跳转起不了作用,因为nginx会把后面的一整串都认为是URL。但是在浏览器上,只会访问到a.html这个文件。

然后google了一下,发现问号在nginx中是有特殊作用的,那我们就需要使用其他的方法了。

在查询nginx的参数的时候,发现了querystring和???????????和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  # 跳转后

相关文件下载方式: 微信关注以下公众号回复数字 516165 获取。

正文完
微信搜一搜“奇悦电脑科技”或扫描二维码关注我们
post-qrcode
 0
章郎虫
版权声明:本站原创文章,由 章郎虫 于2024-05-25发表,共计862字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。