NGINX $request_uri 对比 $uri
NGINX $request_uri vs $uri
您如何确定何时使用 $request_uri
与 $uri
?
根据 NGINX 文档,$request_uri
是原始请求(例如,/foo/bar.php?arg=baz
包含参数且无法修改)但 $uri
指的是更改后的 URI。
如果 URI 没有改变,$uri = $request_uri?
使用它是不正确的还是更好的还是更坏的:
map $uri $new_uri {
# do something
}
对
map $request_uri $new_uri {
# do something
}
$uri
不等同于 $request_uri
.
$uri
变量设置为 nginx
当前正在处理 的 URI - 但它也受到规范化,包括:
- 删除
?
和查询字符串
- 连续
/
个字符被单个 /
字符替换
- URL 编码字符被解码
$request_uri
的值始终是原始 URI,不受上述任何规范化的影响。
大多数时候您会使用 $uri
,因为它已标准化。在错误的地方使用 $request_uri
会导致 URL 个编码字符被双重编码。
如果需要匹配 URI 及其查询字符串,请在 map
指令中使用 $request_uri
。
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/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
您如何确定何时使用 $request_uri
与 $uri
?
根据 NGINX 文档,$request_uri
是原始请求(例如,/foo/bar.php?arg=baz
包含参数且无法修改)但 $uri
指的是更改后的 URI。
如果 URI 没有改变,$uri = $request_uri?
使用它是不正确的还是更好的还是更坏的:
map $uri $new_uri {
# do something
}
对
map $request_uri $new_uri {
# do something
}
$uri
不等同于 $request_uri
.
$uri
变量设置为 nginx
当前正在处理 的 URI - 但它也受到规范化,包括:
- 删除
?
和查询字符串 - 连续
/
个字符被单个/
字符替换
- URL 编码字符被解码
$request_uri
的值始终是原始 URI,不受上述任何规范化的影响。
大多数时候您会使用 $uri
,因为它已标准化。在错误的地方使用 $request_uri
会导致 URL 个编码字符被双重编码。
如果需要匹配 URI 及其查询字符串,请在 map
指令中使用 $request_uri
。
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/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