繁体   English   中英

没有参数的 Nginx request_uri

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM