2010-02-01 11 views
4

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.

Répondre

4

REQUEST_URI est destiné à contenir le chemin et la requête d'URL demandés.

+0

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

+0

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

+0

@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