openresty url 재 작성

4618 단어 nginxopenrestylua
이 장 은 주로 lua 로 url 재 작성 을 하 는 방법 을 소개 합 니 다. 사실은 nginx 를 통 해 url 재 작성 을 완성 할 수 있 지만 재 작성 규칙 이 복잡 할 때 nginx 를 사용 하 는 것 이 그리 편리 하지 않 습 니 다. lua 로 쉽게 해결 할 수 있 습 니 다.
여기 서 몇 가지 가장 핵심 적 인 api 를 사용 하 는 것 은 바로 ngx.redirect, ngx.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 재 작성 을 한 곳 에 통일 적 으로 쓰 고 유지 하기 편리 하도록 하기 위해 서 우 리 는 이전에 포 장 된 뮤 직 비디오 프레임 워 크 를 확대 할 수 있 습 니 다.
이런 코드 를 더 하 다
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

예제 코드 데모 10 부분 참조

좋은 웹페이지 즐겨찾기