使用lua实现nginx rewrite

上一次上线只是简单的把手机端的流量切换手机端的首页,有点粗糙,现在需要把电脑端相应的页面切换到电脑端的页面,直接用nginx自带的rewrite不太好做,所以用lua做

下面开始代码

nginx 配置

location / {
	rewrite_by_lua_file lua/mobile.lua;
	... # 反向代理
}

mobile.lua代码

-- 手机访问重定向到移动版

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

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

        local rewrite_urls = {}
        rewrite_urls["/"] = "/app/index.html"
        rewrite_urls["/coin/index.html"] = "/app/coin.html"
        rewrite_urls["/equity/index.html"] = "/app/coin.html"
        rewrite_urls["/guide/index.html"] = "/app/guide.html?" .. queryString
        rewrite_urls["/market/trade.html"] = "/app/trade.html?" .. queryString
        rewrite_urls["/account/fund.html"] = "/app/account.html?" .. queryString
        rewrite_urls["/guide/article.html"] = "/app/guide-details.html?" .. queryString

        local redirect_uri = rewrite_urls[ngx.var.uri]

        if redirect_uri then
            ngx.redirect(redirect_uri, ngx.HTTP_MOVED_TEMPORARILY)
        end
    end
end

其实逻辑也很简单,主要在nginx rewrite 阶段完成页面跳转,判断是否手机端,然后通过一个table把对应的url映射好,直接以当前uri作为key取table的值,如果取到说明有映射关系,直接把值当成新的url重定向过去

queryString是get参数,有的需要有的不需要,不带参数的话,有点页面会有问题,比如文章详情,是需要文章ID的

通过lua可以写很复杂的服务端处理逻辑,应用程序只需要做好自己的事情就好了

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值