33 lines
1.0 KiB
Lua
33 lines
1.0 KiB
Lua
local kong = kong
|
|
local kong_meta = require "kong.meta"
|
|
local ada = require "resty.ada"
|
|
|
|
local RedirectHandler = {}
|
|
|
|
-- Priority 779 so that it runs after all rate limiting/validation plugins
|
|
-- and all transformation plugins, but before any AI plugins which call upstream
|
|
RedirectHandler.PRIORITY = 779
|
|
RedirectHandler.VERSION = kong_meta.version
|
|
|
|
function RedirectHandler:access(conf)
|
|
-- Use the 'location' as-is as the default
|
|
-- This is equivalent to conf.incoming_path == 'ignore'
|
|
local location = conf.location
|
|
|
|
if conf.keep_incoming_path then
|
|
-- Parse the URL in 'conf.location' and the incoming request
|
|
local location_url = ada.parse(location)
|
|
|
|
-- Overwrite the path in 'location' with the path from the incoming request
|
|
location = location_url:set_pathname(kong.request.get_path()):set_search(kong.request.get_raw_query()):get_href()
|
|
end
|
|
|
|
local headers = {
|
|
["Location"] = location
|
|
}
|
|
|
|
return kong.response.exit(conf.status_code, "redirecting", headers)
|
|
end
|
|
|
|
return RedirectHandler
|