首页 > 其他分享 >url rewrite功能实现

url rewrite功能实现

时间:2023-04-05 20:12:32浏览次数:36  
标签:功能 .. rewrite url local uri str ngx

背景: abc.com/live/stream.m3u8 需要改写成abc.com/live/stream/index.m3u8
通过lua实现的逻辑如下

  1. 修改nginx.conf 主配置文件,增加rewrite_by_lua_file ,指定改写脚本
http {
	rewrite_by_lua_file lua/rewrite/rewrite_main.lua;
}
  1. lua/rewrite/rewrite_main.lua 文件编写处理逻辑
local function split(str,delimiter)
    local dLen = string.len(delimiter)
    local newDeli = ''
    for i=1,dLen,1 do
        newDeli = newDeli .. "["..string.sub(delimiter,i,i).."]"
    end

    local locaStart,locaEnd = string.find(str,newDeli)
    local arr = {}
    local n = 1
    while locaStart ~= nil
    do
        if locaStart>0 then
            arr[n] = string.sub(str,1,locaStart-1)
            n = n + 1
        end

        str = string.sub(str,locaEnd+1,string.len(str))
        locaStart,locaEnd = string.find(str,newDeli)
    end
    if str ~= nil then
        arr[n] = str
    end
    return arr
end


local function m3u8_rewrite()
   local uri = ngx.var.uri
   ngx.log(ngx.ERR, "uri: ".. uri)
    --获取最后一段
    local uri_list = split(uri,"/")
    if uri_list[4] then
        return uri
    end
    local app = uri_list[2]
    ngx.log(ngx.ERR, "app: "..app )
    local name = split(uri_list[3], ".")[1]
    ngx.log(ngx.ERR, "starturi: "..app .."; name: ".. name)
    return string.format("/%s/%s/index.m3u8", app,name)
end

local function process()
    local rewrite_uri = m3u8_rewrite()
    ngx.log(ngx.INFO, "rewrite_uri: ".. rewrite_uri)
    ngx.req.set_uri(rewrite_uri)
end

process()

标签:功能,..,rewrite,url,local,uri,str,ngx
From: https://www.cnblogs.com/feng0919/p/17290746.html

相关文章

  • mysql实现nextVal功能
    mysql实现nextVal功能首先创建表:CREATETABLE`sys_sequence`(`NAME`varchar(50)NOTNULL,`CURRENT_VALUE`int(11)NOTNULLDEFAULT'0',`INCREMENT`int(11)NOTNULLDEFAULT'1',PRIMARYKEY(`NAME`))插入记录INSERTINTOSYS_SEQUEN......
  • 外卖APP系统开发要完善的功能,让你运筹帷幄
     开发一个外卖APP系统对于许多商家来说都是迫在眉睫的事情,可以说外卖APP系统对于商家的帮助是非常大的。不过在开发时我们要完善一些功能,下面名锐讯动为大家介绍外卖APP系统开发要完善的功能。 1.客户端。当用户进入外卖APP的时候首先浏览到的是APP的首页,这时候要求呈现商家提......
  • delphi FastReport 常用功能
    FastReport常用功能属性和方法TfrxReport.LoadFromFilefunctionLoadFromFile(constFileName:String;ExceptionIfNotFound:Boolean=False):Boolean;从给定名称的文件中加载报表。如果文件加载成功,返回True。参数FileName文件的名称。ExceptionIfNotFound如果为T......
  • Web开发的那点事--业务层常用功能
      常见功能(以博客中的文章管理为示例)   1.增加   业务:写一篇文章  技术:    前端:一个页面或者对话框,等待用户输入,数据校验成功,提交代码      后端:存储到一个数据库表格中,有可能会存进多个表格。    常见问题:是否能重复增加    2.查看......
  • Web开发的那点事--数据持久层常用功能
    数据持久层--4类功能1.增加 增加一条记录-实体(有关联,没有关联) 2.修改 修改一个字段 修改多个字段 修改哪一列或哪些列:where一列多列 主键定位,多个列定位3.删除  物理删除:删除哪一列或哪些列  逻辑删除:本质是更新操作,修改isDeleted(对所有表的记录逻辑删除,几......
  • WordPress添加前端代码演示功能详解–无须插件
    如果用Wordpress来写技术博客,尤其是写关于前端部分的,我相信会有不少博主希望能在博客里添加演示功能。这样读者对文章所说的代码效果会有个直观的感受,也能知晓其效果是否为自己所需的。另外一方面,添加演示也意味着文中的代码是没有问题的,增加文章可读性与可信性。添加演示代码功能......
  • [!] CDN: trunk URL couldn‘t be downloaded: https://cdn.jsdelivr.net/cocoa/
    热烈欢迎,请直接点击!!!进入博主AppStore主页,下载使用各个作品!!!注:博主将坚持每月上线一个新app!!!清华CocoaPods镜像源:CocoaPods镜像使用帮助CocoaPods是一个Cocoa和CocoaTouch框架的依赖管理器,具体原理和Homebrew有点类似,都是从GitHub下载索引,然后根据索引下载依赖的源......
  • mysql中on有时有筛选的功能
    leetcode中行程和用户SELECTrequest_atas'Day',round(avg(Status!='completed'),2)as'CancellationRate'FROMtripstJOINusersu1ON(t.client_id=u1.users_idANDu1.banned='No')JOINusersu2ON(t.driver......
  • 从浏览器输入 url 到显示出结果的全过程,涉及哪些层哪些协议?
    过程中涉及的协议及层:1.当在浏览器输入URL地址,DNS域名解析协议(应用层协议)解析域名获得IP;2.依据IP地址浏览器向服务器发送HTTP请求,使用TCP协议(传输层协议)与服务器建立连接;3.连接建立时要发送数据,发送数据在网络层使用IP协议(网络层协议);4.期间IP数据包在路由器间路由选择使用......
  • 一篇文章教你从入门到精通 Google 指纹验证功能
    作者:SunDaxiangGoogle从Android6.0开始,提供了开放的指纹识别相关API,通过此篇文章可以帮助开发者接入指纹验证的基础功能,并且提供了系统应用基于指纹验证的功能扩展,如指纹验证登录功能核心流程图和关键代码分析。一、基础篇从Android6.0开始,Android系统支持指纹识别功能,指纹......