Telle qu'elle était implémentée dans les versions antérieures à la version 1.1.1 d'Apache (comprise), la méthode utilisée par Apache pour créer la variable PATH_INFO dans l'environnement CGI était loin d'être intuitive, et pouvait conduire à certaines défaillances dans certains cas. A partir de la version 1.2 d'Apache, cette méthode a été modifiée. Bien que ces modifications puissent conduire à certaines incompatibilités avec certaines applications CGI, le comportement d'Apache 1.2 reste toujours compatible avec la spécification CGI/1.1, et les scripts CGI restent facilement modifiables (voir ci-dessous).
Les versions d'Apache jusqu'à 1.1.1 construisaient les variables d'environnement CGI PATH_INFO et SCRIPT_NAME en inspectant les noms de fichiers, et non les URL. Bien que cette technique conduise à des valeurs correctes dans la plupart des cas, il pouvait arriver que le chemin défini par le système de fichiers soit surchargé par une redéfinition, laquelle conduisait à une mauvaise interprétation lors de la constitution des variables. Par exemple, si la ligne suivante apparaissait dans un fichier de configuration :
Alias /cgi-ralph /usr/local/httpd/cgi-bin/user.cgi/ralph
Dans ce cas, user.cgi
désigne le script
CGI, la chaîne "/ralph" est une information à
passer au CGI. Si cette configuration était en place, et
qu'une requête vers "/cgi-ralph/script/
"
était reçue, le code du serveur aurait
constitué une variable PATH_INFO de valeur
"/ralph/script
", et SCRIPT_NAME de valeur
"/cgi-
". Il est évident de constater que la
deuxième variable est fausse. Dans certains cas, cela
aurait même pu conduire à un arrêt du
serveur.
Les versions postérieures à 1.2 d'Apache
définissent maintenant les variables SCRIPT_NAME et
PATH_INFO en inspectant directement l'URL, et en
déterminant quelle portion de l'URL est modifiable par
le client. PATH_INFO est initialisé à cette
partie modifiable. Pour réexploiter l'exemple ci-dessus,
PATH_INFO prendrait maintenant la valeur
"/script
", et SCRIPT_NAME la valeur correcte
"/cgi-ralph
". Il n'y a plus de problème de
comportement du serveur dans ce cas. Cela permet en outre de
garantir l'accessibilité de l'URL
http://$SERVER_NAME:$SERVER_PORT$SCRIPT_NAME$PATH_INFO
"
laquelle pointe sur le script courant. Ce n'était pas
nécesairement vrai dans les versions
précédentes d'Apache.
Toutefois, l'information "/ralph
" de la
directive Alias
est perdue. Nous pensions que
l'utilisation du système de fichiers pour faire passer
ce genre d'information n'était pas une méthode
recommandée, et un script utilisant ce principe
était de toutes façons à éviter.
Nous avons ajouté malgré tout à partir de
la version 1.2b3 d'Apache une façon de contourner cette restriction.
Il se peut que certains scripts écrits pour des versions antérieures d'Apache ou pour d'autres serveurs aient besoin d'exploiter les informations données dans l'ancien modèle de variable PATH_INFO. A cet effet, la version 1.2 d'Apache (1.2b3 et postérieures) proposent une variable supplémentaire, appelée FILEPATH_INFO. Cette nouvelle variable d'environnement contient la valeur qui était précédemment inscrite dans PATH_INFO par la version 1.1.1 d'Apache.
Un script désirant être compatible avec toutes les versions d'Apache peut simplement tester l'existence de la variable FILEPATH_INFO, et utiliser cette variable si besoin est. Autrement, il récupérera ses informations dans la variable PATH_INFO. Par exemple, en Perl, on pourra écrire :
$path_info = $ENV{'FILEPATH_INFO'} || $ENV{'PATH_INFO'};
Par cette écriture, un script fonctionnera avec tous les serveurs conformes à la spécification CGI/1.1, incluant par là même toutes les versions d'Apache.