您如何确定何时使用$request_uri与$uri
根据NGINX文档,$request_uri是原始请求(例如,/foo/bar.php?arg=baz包含参数,不能修改),但$uri指的是更改后的URI。
如果URI没有改变,$uri = $request_uri吗?
使用它是不正确的,还是更好或更糟糕:
map $uri $new_uri {
# do something
}vs
map $request_uri $new_uri {
# do something
}发布于 2018-02-10 00:18:09
$uri不等同于$request_uri。
$uri变量被设置为nginx当前正在处理的的URI -但它也受到规范化的影响,包括:
编码字符的删除和查询string
/
/ $request_uri的值始终是原始URI,不受上述任何标准化的影响。
大多数时候你会使用$uri,因为它是标准化的。在错误的位置使用$request_uri可能会导致对URL码字符进行双重编码。
如果需要匹配URI及其查询字符串,请在map指令中使用$request_uri。
发布于 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:
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/goodsNginx文档: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
https://stackoverflow.com/questions/48708361
复制相似问题