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
}
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.
The try_files directive commonly uses the $uri variable, which represents the part of the URL after the domain name. In the following example, NGINX serves a default GIF file if the file requested by the client doesn't exist.
The root directive specifies the root directory that will be used to search for a file. To obtain the path of a requested file, NGINX appends the request URI to the path specified by the root directive. The directive can be placed on any level within the http {} , server {} , or location {} contexts.
Every NGINX configuration file will be found in the /etc/nginx/ directory, with the main configuration file located in /etc/nginx/nginx. conf . NGINX configuration options are known as “directives”: these are arranged into groups, known interchangeably as blocks or contexts .
$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:
?
and query string/
characters are replace by a single /
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.
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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With