Un rapide :
Je suis curieux de savoir si quelqu'un connaît certaines circonstances dans lesquelles $_SERVER['REQUEST_URI']
contiendrait une valeur différente de celle de $_GET['_uri']
compte tenu de ce qui suit .htaccess
pour ces derniers :
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ ?_uri=$1 [L,QSA]
J'ai utilisé cette dernière méthode $_GET['_uri']
et bien que je sois conscient que mod_rewrite
serait toujours nécessaire, j'aimerais éviter de stocker l'URI en tant que paramètre de requête.
J'en ai trouvé une que je n'avais pas remarquée auparavant : lorsque l'application démarre et que la fonction mod_rewrite
n'est pas dans le répertoire web Root, $_SERVER['REQUEST_URI']
contient les répertoires parents, tandis que $_GET['_uri']
ne contient que le dernier composant URI. Exemple :
Bootstrap est
/subdir/index.php
Demandehttp://localhost/subdir/foo/bar/baz/
$_SERVER['REQUEST_URI']
"/subdir/foo/bar/baz/"
$_GET['_uri']
"foo/bar/baz/"
Afin de reproduire le résultat de $_GET['_uri']
a décidé de l'utiliser :
$prefix = trim(dirname(strtr($_SERVER['PHP_SELF'], '\\', '/')), '/') . '/';
$uri = trim($_SERVER['REQUEST_URI'], '/') . '/';
if(substr($uri, 0, strlen($prefix)) == $prefix){
$uri = substr($uri, strlen($prefix));
}
Mais je n'ai pas utilisé $_SERVER['PHP_SELF']
souvent dans le passé, et j'ai lu qu'il comportait certaines vulnérabilités et/ou incohérences quant à son utilisation.