Comment déterminez-vous quand utiliser $request_uri
vs $uri
?
Selon la documentation de NGINX, $request_uri
est la demande d'origine (par exemple, /foo/bar.php?arg=baz
inclut des arguments et ne peut pas être modifié) mais $uri
fait référence à l'URI modifié.
Si l'URI ne change pas, est-ce que $ uri = $ request_uri?
Serait-il incorrect, meilleur ou pire d'utiliser:
map $uri $new_uri {
# do something
}
contre
map $request_uri $new_uri {
# do something
}
$uri
n'est pas équivalent à $request_uri
.
La variable $uri
est définie sur l'URI que nginx
est en cours de traitement - mais il est également soumis à la normalisation, notamment:
?
et chaîne de requête/
consécutifs sont remplacés par un seul /
La valeur de $request_uri
est toujours l'URI d'origine et n'est soumise à aucune des normalisations ci-dessus.
La plupart du temps, vous utiliseriez $uri
, car il est normalisé. L'utilisation de $request_uri
au mauvais endroit peut entraîner le codage double des caractères encodés en URL.
Utilisez $request_uri
dans une directive map
, si vous devez faire correspondre l'URI et sa chaîne de requête.
Une autre différence concernant $uri
et $request_uri
dans proxy_cache_key
est $request_uri
inclura anchor tags part
, mais $uri$is_args$args
l'ignorera.
Effectuez une opération 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 Document: http://nginx.org/en/docs/http/ngx_http_core_module.html#var_request_uri
$request_uri
: adresse URI complète de la demande d'origine (avec arguments)$uri
: URI actuel dans la requête, normalisé La valeur de $ uri peut changer pendant le traitement de la requête, par ex. lors de redirections internes ou lors de l'utilisation de fichiers d'index.Clé du cache du proxy: http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_cache_key