Je travaille avec un site PHP qui doit enregistrer les erreurs dans une base de données. En tant que tel, je l'ai mis en place un fichier .htaccess comme suit:Quel est le meilleur moyen d'obtenir l'URL d'un fichier 404 après la redirection?
ErrorDocument 404 /404.php
404.php contient toutes les fonctions de journalisation nécessaires pour insérer le journal dans la base de données. Ce que je vais avoir des problèmes avec l'URL est la récupération du fichier qui a déclenché la 404.
Voici le contenu du tableau $ _SERVER superglobale:
[HTTP_HOST] => {omitted} [HTTP_USER_AGENT] => Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.1.7) Gecko/20091221 Firefox/3.5.7 [HTTP_ACCEPT] => text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 [HTTP_ACCEPT_LANGUAGE] => en-us,en;q=0.5 [HTTP_ACCEPT_ENCODING] => gzip,deflate [HTTP_ACCEPT_CHARSET] => ISO-8859-1,utf-8;q=0.7,*;q=0.7 [HTTP_KEEP_ALIVE] => 300 [HTTP_CONNECTION] => keep-alive [PATH] => /usr/local/bin:/usr/bin:/bin [SERVER_SIGNATURE] => [SERVER_SOFTWARE] => Apache/2.2.8 (Ubuntu) [SERVER_NAME] => {omitted} [SERVER_ADDR] => {omitted} [SERVER_PORT] => 80 [REMOTE_ADDR] => {omitted} [DOCUMENT_ROOT] => {omitted} [SERVER_ADMIN] => [no address given] [SCRIPT_FILENAME] => /404.php [REMOTE_PORT] => 19274 [GATEWAY_INTERFACE] => CGI/1.1 [SERVER_PROTOCOL] => HTTP/1.1 [REQUEST_METHOD] => GET [QUERY_STRING] => [REQUEST_URI] => /404.php [SCRIPT_NAME] => /404.php [PHP_SELF] => /404.php [REQUEST_TIME] => {omitted}
Toutes les suggestions? Tout ce que j'ai lu recommande l'élément HTTP_REFERER, mais il ne semble pas exister.
Merci d'avance.
Je suis conscient de cela. Cependant, comme indiqué ci-dessus, REQUEST_URI renvoie le chemin 404.php et non la requête d'origine (par exemple nonexistentfile.php). Y a-t-il peut-être des directives que je peux ajouter au fichier .htaccess qui empêcheraient le client d'être redirigé? – Warren
Ceci est la bonne réponse. Il semble que REQUEST_URI ne contiendra le referrer que si ErrorDocument est un fichier relatif (pas d'URL absolues). Merci! – Warren
@Warren: Si vous spécifiez une URL absolue comme document d'erreur, le serveur répondra avec un code d'état 302 (redirection) au lieu d'un 404. – Gumbo