基于openresty进行 query string 重写
主要目前很简单就是移除nginx request 中的query_string,因为rewrite 阶段处理的是uri ,不包含query_string,但是rewrite 会保持
原query_string ,我们可以通过args 变量重写,当然也可以基于openresty 的 ngx.req.set_uri_args 重写,从代码的简洁以及扩展上
基于openresty 更好点,以下是一个简单的demo说明
需求
- 格式
/demo/?name=demo
重写为
/demo/
环境准备
- docker-compose 文件
version: "3"
services:
api:
image: openresty/openresty:alpine
volumes:
- "./nginx.conf:/usr/local/openresty/nginx/conf/nginx.conf"
- "./demoapps:/opt/demoapps"
ports:
- "80:80"
- "8080:8080"
- nginx.conf
user root;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
gzip on;
rewrite_log on;
real_ip_header X-Forwarded-For;
server {
listen 80;
charset utf-8;
default_type text/html;
location / {
root /opt/demoapps;
index index.html index.htm index;
}
location ~* ^/demo {
root /opt/demoapps;
rewrite_by_lua_block {
-- format /demo/index.html?name=dalong
// 基于re.sub 当然也可以使用match 进行处理
local uri,n,err = ngx.re.sub(ngx.var.request_uri, [[^\/(.+)\/(.+)\?(.+)]], "/$1/$2", "o")
ngx.log(ngx.ERR,"fetch---"..uri..[[---------]]..ngx.var.request_uri)
if n > 0 then
-- you can also set uri
-- ngx.req.set_uri(uri,false)
ngx.req.set_uri_args({a="dalong"})
end
}
content_by_lua_block {
local cjson = require("cjson.safe");
local info = {
request_uri = ngx.var.request_uri,
query_string = ngx.var.query_string
}
ngx.say(cjson.encode(info))
}
}
}
}
- 启动
docker-compose up -d
效果
说明
nginx 的request_uri 变量是只读的,不可修改的,实际使用查询字符串,推荐使用query_string
一个完整的使用参考/index.html$is_args$query_string
此配置对于但页面应用是比较有意义的
$is_args 表示是否携带query_string 包含了为? 没有为空
参考资料
http://nginx.org/en/docs/varindex.html
https://github.com/openresty/lua-nginx-module#ngxreqset_uri_args
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
2019-07-27 telegraf 学习一 基本安装
2018-07-27 swagger api 转graphql npm 包试用
2017-07-27 piwik docker 安装
2015-07-27 jQuery的图像裁剪插件Jcrop
2015-07-27 jquery-qrcode生成二维码