首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NGINX $request_uri vs $uri

NGINX $request_uri vs $uri
EN

Stack Overflow用户
提问于 2018-02-09 22:46:59
回答 2查看 116.4K关注 0票数 59

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

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

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

使用它是不正确的,还是更好或更糟糕:

代码语言:javascript
复制
map $uri $new_uri {
  # do something
}

vs

代码语言:javascript
复制
map $request_uri $new_uri {
  # do something
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-02-10 00:18:09

$uri不等同于$request_uri

$uri变量被设置为nginx当前正在处理的的URI -但它也受到规范化的影响,包括:

编码字符的删除和查询string

  • Consecutive字符都被替换为单个/

  • URL编码的字符被解码/

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

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

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

票数 91
EN

Stack Overflow用户

发布于 2018-11-12 18:22:33

proxy_cache_key$uri$request_uri的另一个不同之处在于,$request_uri将包含anchor tags part,但$uri$is_args$args将忽略它

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

代码语言:javascript
复制
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

票数 17
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48708361

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档