2019独角兽企业重金招聘Python工程师标准>>>

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

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

ngx.redirect

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


old uri/index/article?id=10000ngx.redirect('/article' .. ngx.var.is_args .. ngx.var.args)new uri/article?id=10000

ngx.exec

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


old uri/index/article?id=10000ngx.exec('/article' .. ngx.var.is_args .. ngx.var.args)new uri/index/article?id=10000

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

加上这么一段代码

lite/mvc.lua

-- url 重写 beginlocal ret, rewrite = pcall(require, "rewrite") -- 安全引入rewrite模块,假如没有也不会报错if ret thenlocal c_ret, r_ret = pcall(rewrite.exec, uri)-- c_ret 表示执行成功,r_ret 表示已重定向,两者都为true,则表示重写成功,则不继续往下执行if c_ret and r_ret thenreturnend
end-- url 重写end

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

rewrite.lua


local _M = {}function _M.exec(uri)local rewrite_urls = {}local queryString = ngx.var.argsif queryString == nil then queryString = "" endrewrite_urls['/index/article'] = '/article?' .. queryStringlocal match_url = rewrite_urls[uri]if match_url then-- ngx.redirect(match_url) -- url 变化ngx.exec(match_url)        -- url 无变化return trueendreturn false
endreturn _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部分

转载于:https://my.oschina.net/362228416/blog/829463

openresty url重写相关推荐

  1. 配置伪静态(URL重写)

    本篇借鉴了很多文章,这里做个记录. 有时我们的导航栏出现xx.aspx?id=x&name=xx 等等这样,会显得不好看,我们可以利用伪静态来美化我们的导航栏,伪静态的形式可以自己定义,本质还 ...

  2. ASP.net实现无扩展名的URL重写。简单、方便、无需ISAPI

    URL重写已经有很多的方法,但是多数都有一个缺点,就是不支持无扩展名的网页.微软提供的方法需要在根目录里面建立jyk的文件夹,然后再建立一个default.aspx的文件,如果您有100名会员的话,这 ...

  3. 在 ASP.NET 中执行 URL 重写

    在 ASP.NET 中执行 URL 重写 发布日期: 8/23/2004 | 更新日期: 8/23/2004 Scott Mitchell 4GuysFromRolla.com 适用范围: Micro ...

  4. Web服务器 之 Apache 2.x 服务器中的URL重写的配置和应用

    作者:北南南北 来自:LinuxSir.Org 摘要: 本文是关于Apache 2.x 服务器中的URL别名规则的文档,它是通过rewrite模块来实现的.能过URL别名规则,我们能看到一个干净的UR ...

  5. Cento7+Nginx 之 URL重写

    Cento7+Nginx  之  URL重写 我们前一篇文章写了一个Cento7+Nginx 反向代理实现多域名跳转,今天主要介绍一下Cento7+Nginx  之  URL重写, Hostname: ...

  6. asp.net用url重写URLReWriter实现任意二级域名 (转)

    asp.net用url重写URLReWriter实现任意二级域名 Asp.net 用url重写(URLReWriter)实现任意二级域名 好久没有写技术文章,如果大家看不明白,就多看几篇,汗,或者,在 ...

  7. DTCMS插件的制作实例电子资源管理(四)URL重写

    总目录 插件目录结构(一) Admin后台页面编写(二) 前台模板页编写(三) URL重写(四) 本实例旨在以一个实际的项目中的例子来介绍如何在dtcms中制作插件,本系列文章非入门教程,部分逻辑实现 ...

  8. ASP.NET Url重写

    新建一个类,并实现IHttpModule接口 实现接口,在Init方法中处理请求,在请求方法中实现具体的Url重写操作 补充Url重写方法,通过 Request的Path对象获取请求文件路径,并根据请 ...

  9. apache配置反向代理以及实现url重写,防盗链

    反向代理配置: 在apache配置文件中加上这一句 反向代理google(已测试) 安装mod_ssl模块:yum -y install mod_ssl 实现url重写: 在apache配置文件中加上 ...

最新文章

  1. ios uiview 如何刷新_UIView的重绘及布局刷新
  2. “山东土地集团杯”暨滨州市数据应用创新创业大赛正式启动!
  3. windows 改变文件大小 函数_手写 bind call apply 方法 与 实现节流防抖函数
  4. c#随机数生成编号_忘掉 Snowflake,感受一下性能高出587倍的全局唯一ID生成算法...
  5. SimpleDateFormat类 java 1614697530
  6. 解决UE4 Launcher启动速度极慢的方法
  7. Matlab协方差矩阵的计算原理
  8. 用JAVA实现小学四则运算
  9. aliez歌词_【aLIEz】附平假名歌词(完整)
  10. opencv实现移动速度计算
  11. [FIPS 197] AES 测试向量
  12. 用VC++5.0播放AVI文件的两种方法
  13. 【程序人生】有个程序员男朋友是什么体验?被公开吐槽
  14. 电脑配置低用不了PS怎么办?你需要网页版ps!
  15. 实现一个直播视频app源码的邀请码功能
  16. jeecg-boot:将单表列表页作为弹框,并且传递参数到解决方案(场景商品到明细信息维护)
  17. 全球及中国精密加工零件行业市场需求及未来发展展望报告2022-2028年
  18. 搭建最炫酷的 Windows Terminal 全新命令行更新以及美化指南 微软新版终端工具安装美化教程
  19. 教育系统APP(一)
  20. 误删桌面文件如何恢复?

热门文章

  1. node 生产的env文件怎么注入_Node.js进阶之进程与线程
  2. 得到java异常printStackTrace的详细信息
  3. window.opener.document.getElementById(“a”)用标准的Jquery 语言怎么写
  4. php 4443 端口_Server configuration (Notary)
  5. c语言编程任意矩阵相乘,c语言矩阵相乘
  6. ppt设置外观样式_如何设置更符合需要的幻灯片背景?
  7. 2021年春季学期-信号与系统-第三次作业参考答案-第七道题
  8. 电抗电路的串并联的转换
  9. 双轴机械臂建模分析数据
  10. rabbimq与PHP,PHP初次使用rabbitMQ