[英]Nginx request_uri without args
如何在没有附加参数的情况下获取request_uri
的值。 我知道有一个uri
变量,但我需要原始值,如 Nginx 文档所述:
request_uri
此变量等于从客户端收到的原始请求 URI,包括 args。 它不能被修改。 查看 $uri 以获取重写/更改后的 URI。 不包括主机名。 示例:“/foo/bar.php?arg=baz”
我使用这张地图,它在没有 lua 的情况下工作:
map $request_uri $request_uri_path {
"~^(?P<path>[^?]*)(\?.*)?$" $path;
}
您正在寻找 $uri。 它没有 $args。 事实上,$request_uri 几乎等同于 $uri$args。
如果你真的想要去掉 args 的 $request_uri,你可以这样做。
local uri = string.gsub(ngx.var.request_uri, "?.*", "")
您需要有 lua 可用,但这将完全满足您的要求。
接受的答案为我指明了正确的方向,但我必须弄清楚在哪里添加该指令,经过一段时间的调查,我发现set_by_lua_block
set_by_lua_block $request_uri_path {
return string.gsub(ngx.var.request_uri, "?.*", "")
}
我希望它为那些来到这里的人节省一些时间。
Ryan Olson 的回答非常好,但不能到处使用map
。
如果您需要在不接受使用map
的块级别获取该信息,则可以在if
语句中完成。 但请记住, 如果是邪恶的。
set $new_uri "";
if ($request_uri ~ "^([^?]*)(\?.*)?$") {
set $new_uri $1;
}
此代码开箱即用(它不使用 Lua 或其他任何东西)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.