nginx在指定url下获取其中的参数重写


场景: 在使用nginx过程中,我们很多时候有重写的需求,例如有争对url的、有争对域名的、也有争对目录的等等,当然,争对参数的重写,我们也在很多场景下会用得到,我们今天来争对参数下的举个例子 --“nginx在指定url下获取其中的参数重写”,也就是对指定url类型中的参数,进行重写,下面一起来看看。

版本说明:
Tengine version: Tengine/2.3.2
nginx version: nginx/1.17.3

需求说明:
假设请求:https://www.test.cn/look/app.html?key=xxx&url=yyy   类似路径地址, 其中,链接地址中只有参数会变动;
重写要求:将类似以上带有 /look/app.html 链接的参数 如:?key=xxx&url=yyy  中的 key=xxx&url=yyy ,重写为 https://www.test.cn/think/?key=xxx&url=yyy ;

实现方式:


 if ( $uri ~ "^/look/app.html*") {
       rewrite ^/(.*)$ https://www.test.cn/think/$is_args$args?;
 }


当然我们也可以直接重写到根域名下:

 if ( $uri ~ "^/look/app.html*") {
       rewrite ^/(.*)$ https://www.test.cn$is_args$args?;
 }


遇到的问题:
按照官方的全局变量说明:$args 应该就直接可以获取到指定url的所有参数,但是我们在测试过程中发现, 使用:https://www.test.cn$args 或者https://www.test.cn?$args  并不能实现我们的需求, 而得到的结果是:参数在url后,重复了两(2)次 ,  而使用 $is_args$args?  才能实现需求。

官方的相关解释:
$args  :  如果请求的url中带有参数,例如https://www.test.cn?md=123 , 则 $args的值就是md=123 .
$is_args : 如果请求的url中带有参数,例如https://www.test.cn?md=123 , 则$is_args的值就是 ?   , 如果没有参数$is_args的值就是 空字符串 .

结论: 这样就不难理解为什么我们前面的需求中需要使用 $is_args$args  来实现了。








本文标签: nginx 参数重写

内容版权声明:【蓝色网居】部分资源来源于网络,如有侵犯您的所有权,请随时告知我们,我们将立即删除!感谢配合!

转载请注明出处:https://blog.ff56.cn/web/1657941486.html


【手机扫一扫查看文本】

手机扫一扫 手机扫一扫查看文本 手机扫一扫





nginx插件 四层 编译安装 接口请求 错误页 geoIP模块 ip白名单 referer限制 nginx 白名单 日志分析 ngx_cache_pu 域名 $http_host 与(and) 404 请求频率 $host 定义404跳转 模糊匹配 apache $server_name 防IP pass_proxy的使 案例分析 large body 重写 扫描访问 或(or) geoip