NGINX $request_uri 与 $uri

发布于 2025-01-11 11:01:31 字数 416 浏览 0 评论 0原文

如何确定何时使用 $request_uri$uri

根据 NGINX 文档, $request_uri 是原始请求(例如 /foo/bar.php?arg=baz 包含参数且无法修改),但是 < code>$uri 指的是更改后的 URI。

如果 URI 没有改变,$uri = $request_uri 吗?

是不正确的还是更好还是更差?

map $uri $new_uri {
  # do something
}

使用: vs

map $request_uri $new_uri {
  # do something
}

How do you determine when to use $request_uri vs $uri?

According to NGINX documentation, $request_uri is the original request (for example, /foo/bar.php?arg=baz includes arguments and can't be modified) but $uri refers to the altered URI.

If the URI doesn't change, does $uri = $request_uri?

Would it be incorrect or better or worse to use:

map $uri $new_uri {
  # do something
}

vs

map $request_uri $new_uri {
  # do something
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

两相知 2025-01-18 11:01:31

$uri 不等于 $request_uri

$uri 变量设置为 nginx 当前正在处理的 URI - 但它也需要进行规范化,包括:

  • 删除 < code>? 和查询字符串
  • 连续的 / 字符被替换为单个 /
  • URL 编码字符被解码

$request_uri 的值始终是原始 URI,并且不受任何上述标准化。

大多数时候您会使用 $uri,因为它是标准化的。在错误的位置使用 $request_uri 可能会导致 URL 编码字符变成双重编码。

如果需要匹配 URI 及其查询字符串,请在 map 指令中使用 $request_uri

$uri is not equivalent to $request_uri.

The $uri variable is set to the URI that nginx is currently processing - but it is also subject to normalisation, including:

  • Removal of the ? and query string
  • Consecutive / characters are replace by a single /
  • URL encoded characters are decoded

The value of $request_uri is always the original URI and is not subject to any of the above normalisations.

Most of the time you would use $uri, because it is normalised. Using $request_uri in the wrong place can cause URL encoded characters to become doubly encoded.

Use $request_uri in a map directive, if you need to match the URI and its query string.

辞旧 2025-01-18 11:01:31

proxy_cache_key$uri$request_uri 的另一个区别是 $request_uri 将包含 锚标记部分< /code>,但 $uri$is_args$args 会忽略它

执行卷曲操作:curl -I static.io/hello.htm?id=1#/favor/goods

proxy_cache_key $scheme://$host$uri$is_args$args; => Cache KEY: http://static.io/hello.htm?id=1
proxy_cache_key $scheme://$host$request_uri; => Cache KEY: http://static.io/hello.htm?id=1#/favor/goods

Nginx 文档:http://nginx.org/en/docs/http/ngx_http_core_module.html#var_request_uri

  • $request_uri :完整原始请求 URI(带参数)
  • $uri
    请求中的当前 URI,已标准化 $uri 的值可能会更改
    在请求处理期间,例如在进行内部重定向时,或者
    使用索引文件时。

代理缓存密钥:
http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_cache_key

Another difference about $uri and $request_uri in proxy_cache_key is $request_uri will include anchor tags part, but $uri$is_args$args will ignore it

Do a curl operation : curl -I static.io/hello.htm?id=1#/favor/goods :

proxy_cache_key $scheme://$host$uri$is_args$args; => Cache KEY: http://static.io/hello.htm?id=1
proxy_cache_key $scheme://$host$request_uri; => Cache KEY: http://static.io/hello.htm?id=1#/favor/goods

Nginx Document: http://nginx.org/en/docs/http/ngx_http_core_module.html#var_request_uri

  • $request_uri : full original request URI (with arguments)
  • $uri:
    current URI in request, normalized The value of $uri may change
    during request processing, e.g. when doing internal redirects, or
    when using index files.

Proxy Cache key:
http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_cache_key

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文