使用OpenResty中的Nginx和Lua获取完整的URL

如果请求的 URL 是 test.com/gifts

如果我使用

ngx.var.uri

输出是

/gifts/

期望的输出是

test.com/gifts

代码:

 location /gifts {
                    try_files $uri @url_change;
                }

                location @url_change {
                default_type text/html;
                content_by_lua '

                        ngx.say(ngx.var.uri)
                         ';
                }
点赞
用户204011
用户204011

难道您所需要的不仅是 $host 变量,即 ngx.var.host 吗?

2013-11-15 13:17:02
用户2149092
用户2149092

我不太明白你想要什么,但如果你想要实际的完整 URL,我认为你可以使用以下代码:

$http_host$request_uri;
2013-11-15 13:22:46
用户1542345
用户1542345
`ngx.say(ngx.var.host .. '/' .. ngx.var.uri)`

将变量 host 与变量 uri 以斜杠连接后,在 ngx.say 函数中输出结果。

2015-01-19 08:29:08
用户1241980
用户1241980

如果有人正在寻找原始请求 URI,它在这里:

ngx.var.request_uri

ngx.var.uri是经过 ngx 重写阶段后的新 URI。

试一下:

ngx.say(ngx.var.request_uri)

2017-09-20 16:09:07
用户6162727
用户6162727

生成完整的 URL 并避免在查询字符串为 nil 时出现错误:

local full_url = ngx.var.scheme.."://"..ngx.var.http_host..ngx.var.request_uri
如果 ngx.var.query_string ~= nil then
  full_url = full_url.."?"..ngx.var.query_string
end
ngx.say(full_url)
2021-02-20 17:36:35