没有args的Nginx request_uri

Kyl*_*cot 16 regex nginx

如何在request_uri没有附加args 的情况下获取值.我知道有一个uri变量,但我需要原始值,因为Nginx文档说明:

REQUEST_URI

此变量等于从客户端(包括args)接收的原始请求URI.它无法修改.查看$ uri以获取重写/更改后的URI.不包括主机名.示例:"/ foo/bar.php?arg = baz"

MTe*_*eck 17

你在寻找$ uri.它没有$ args.实际上,$ request_uri几乎相当于$ uri $ args.

如果你真的想要删除args的$ request_uri,你可以这样做.

local uri = string.gsub(ngx.var.request_uri, "?.*", "")
Run Code Online (Sandbox Code Playgroud)

你将需要拥有lua,但这将完全符合你的要求.

  • 但正如问题所说,$ uri可能会被nginx修改(就像发生错误重定向时一样).那么如何获取原始请求(例如在$ request中)但没有args? (5认同)
  • 尽管lua片段正确,但此答案是错误的。如果发生重写或`try_files`等事件,则$ uri将更改为nginx当前正在测试/评估的路径。 (2认同)

Rya*_*son 13

我使用这个地图,没有lua工作:

map $request_uri $request_uri_path {
  "~^(?P<path>[^?]*)(\?.*)?$"  $path;
}
Run Code Online (Sandbox Code Playgroud)

  • ~ (表示这是一个正则表达式) ^ (锚定到 url 的开头) ( (group/capture) ?P&lt;path&gt; (将此组捕获到变量 $path 中) [^?]* (0 个或多个非'?') ) (结束组) (\?.*)? (也许是一个查询字符串,以“?”开头,之后可能有更多字符)$(锚定网址结尾) (2认同)