openresty url重写

简介:

这一章主要介绍一下怎么用lua来进行url重写,其实通过nginx也可以完成url重写,但是重写规则比较复杂的时候,用nginx就没有那么方便了,用lua可以轻松搞定

这里用到几个最核心的api就是ngx.redirectngx.exec

ngx.redirect

顾名思义,是执行重定向动作,重定向会导致url变更,返回302状态码,浏览器会重新发起一个新请求,到重定向后的url,用法很简单


old uri

/index/article?id=10000

ngx.redirect('/article' .. ngx.var.is_args .. ngx.var.args)

new uri

/article?id=10000

ngx.exec

直接在内部完成请求,并且直接返回内容,url不会变化,用法跟上面差不多


old uri

/index/article?id=10000

ngx.exec('/article' .. ngx.var.is_args .. ngx.var.args)

new uri

/index/article?id=10000

为了使得url重写统一写在一个地方,便于维护,我们可以拓展一下之前封装的mvc框架

加上这么一段代码

lite/mvc.lua

-- url 重写 begin

local ret, rewrite = pcall(require, "rewrite") -- 安全引入rewrite模块,假如没有也不会报错

if ret then
    local c_ret, r_ret = pcall(rewrite.exec, uri)
    -- c_ret 表示执行成功,r_ret 表示已重定向,两者都为true,则表示重写成功,则不继续往下执行
    if c_ret and r_ret then
        return
    end
end

-- url 重写end

然后在lua目录新增一个rewrite.lua文件,内容如下

rewrite.lua


local _M = {}

function _M.exec(uri)
    local rewrite_urls = {}

    local queryString = ngx.var.args
    if queryString == nil then queryString = "" end

    rewrite_urls['/index/article'] = '/article?' .. queryString

    local match_url = rewrite_urls[uri]

    if match_url then
        -- ngx.redirect(match_url) -- url 变化
        ngx.exec(match_url)        -- url 无变化
        return true
    end
    return false
end

return _M

url重新不限于当期站点,可以跨域名,比如一些很常见的场景,电脑端网页在手机端访问的时候可以调整到另外一个域名,或者页面,更好的在移动端显示,例如

local agent = ngx.var.http_user_agent
if agent ~= nil then
local m, ret = ngx.re.match(agent, "Android|webOS|iPhone|iPod|BlackBerry")
if m ~= nil then
    -- rewrite ... 同上,只不过外层多了一层判断,判断设备
end

示例代码 参见demo10部分

目录
相关文章
|
1月前
|
Web App开发 编解码 运维
LNMP详解(十二)——Nginx URL重写实战
LNMP详解(十二)——Nginx URL重写实战
20 2
|
应用服务中间件 nginx
Nginx反向代理/location/URL重写功能实战
一、Nginx反向代理常用实战 二、location 应用实例
Nginx反向代理/location/URL重写功能实战
|
6天前
|
开发框架 搜索推荐 中间件
中间件应用路由和URL重写
【5月更文挑战第2天】中间件应用路由和URL重写
14 3
中间件应用路由和URL重写
|
1月前
|
编解码 运维 搜索推荐
LNMP详解(十一)——Nginx URL重写原理
LNMP详解(十一)——Nginx URL重写原理
16 0
|
2月前
|
JavaScript Windows
VUE部署到IIS中报404错误解决方案-配置URL重写
VUE部署到IIS中报404错误解决方案-配置URL重写
|
8月前
|
iOS开发
解决alert在ios版微信中显示url的问题(重写alert)
解决alert在ios版微信中显示url的问题(重写alert)
71 0
|
缓存 应用服务中间件 Shell
Nginx实战(二) URL重写
Nginx实战(二) URL重写
133 0
|
移动开发
详解IIS中的重写工具下关于操作重定向URL中的{R:N}与{C:N}
详解IIS中的重写工具下关于操作重定向URL中的{R:N}与{C:N}
162 0
详解IIS中的重写工具下关于操作重定向URL中的{R:N}与{C:N}
|
应用服务中间件 nginx 开发者
Nginx反向代理/location/URL重写功能实战| 学习笔记
快速学习Nginx反向代理/location/URL重写功能实战。
170 0
Nginx反向代理/location/URL重写功能实战| 学习笔记
|
搜索推荐 安全 Java
UrlRewrite:重写url,实现伪静态、缩短URL、高安全性
UrlRewrite:重写url,实现伪静态、缩短URL、高安全性
375 0