2 votes

mod_rewrite & PHP ; $_SERVER['REQUEST_URI'] vs. mod_rewrite

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
Demande http://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.

3voto

LazyOne Points 25070
http://example.com/meow?param=value&_uri=hihihi
  • Attendu $_GET['_uri'] résultat : meow
  • Résultat réel : hihihi
  • $_SERVER['REQUEST_URI'] valeur : /meow?param=value&_uri=hihihi
  • $_SERVER['REDIRECT_URL'] valeur : /meow

Tout cela à cause de [QSA] drapeau.

Utilice $_SERVER['REQUEST_URI'] et/ou $_SERVER['REDIRECT_URL'] au lieu de cela.

Ce qui précède s'applique à Apache. Sous IIS 7.x, la situation peut être légèrement différente.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X