IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Apache Discussion :

ErrorDocument 404 : mettre l'url en erreur dans l'url ?


Sujet :

Apache

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 42
    Points : 25
    Points
    25
    Par défaut ErrorDocument 404 : mettre l'url en erreur dans l'url ?
    Bonjour

    Petite question.
    Quand une personne essai d'atteindre un fichier qui n'existe pas, dans mon .htaccess je gère une redirection "ErrorDocument 404"...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ErrorDocument 404 /error.php?err=404
    Et bien évidement, dans error.php je suis à même de récupérer l'url qui était demandée.

    Mais problème, le site concerné est un forum, ce forum a une page viewonline.php qui dit "Qui est en ligne et où?", et quand une personne finit sur la page error.php, je voudrais que les admins puissent savoir quelle était la page demandée.

    Or pour passer cette information à viewonline.php le plus simple serait de passer par l'url, et donc ajouter l'url en erreur à l'url de redirection.
    En clair avoir un truc du genre...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    http://www.monSite.com/error.php?err=404&url=http://www.monSite.com/fichierQuiNexistePas.html
    Donc question, comment faire ?

    Immédiatement, j'ai pensé à un truc qui s'avère ne pas marcher qui aurait été quelque chose comme ça...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ErrorDocument 404 /error.php?err=404&url=%{REQUEST_URI}
    Mais à priori, il va falloir ré-écrire l'url.
    Sauf qu'avec le RewriteEngine je sais pas comment faire.

    Quelqu'un peut m'aider ?
    Merci d'avance !

  2. #2
    Rédacteur
    Avatar de _Mac_
    Profil pro
    Inscrit en
    Août 2005
    Messages
    9 601
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 9 601
    Points : 12 977
    Points
    12 977
    Par défaut
    Désolé, mais je n'ai pas bien compris la question. Pourquoi ne pourrais-tu pas récupérer l'URL demandée dans error.php alors que tu dis justement au début que tu peux ?

    Quel est le rapport entre viewonline.php et error.php ? Pourquoi parles-tu de redirection alors que le navigateur, dans le cas d'une erreur 404 gérée par ErrorDocument 404, n'est pas redirigé ?

    Du détail, du détail, du détail !!!
    Revenons à la source : lisons la documentation et les fichiers de trace, la réponse à notre problème s'y trouve sans doute

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 42
    Points : 25
    Points
    25
    Par défaut
    Salut,

    Citation Envoyé par _Mac_ Voir le message
    Désolé, mais je n'ai pas bien compris la question.
    Le besoin est simple : voir dans une page viewonline comme celle-ci...
    http://www.developpez.net/forums/online.php
    ...les visiteurs qui ont cherché à atteindre un fichier qui n'existe pas, et quel fichier ils ont cherché à atteindre.

    Exemple, à l'heure où j'écris ces lignes, sur Developpez.net tu as...
    -=ET=- Regarde qui est actuellement connecté
    ahmedbj Regarde une discussion "Création et ouverture d'un fichier"
    aminem99 Rédige une nouvelle discussion "WebDev"
    corentin3D Regarde un forum "Projets"
    Etc.
    Et tu pourrais aussi avoir...
    duchemole Ooops... s'est retrouvé sur une page d'erreur 404 ! A cherché à atteindre http://www.developpez.net/fichierBidon.html
    Etc.
    Or, cette page tire ses infos d'une table de sessions qui log la dernière url visitée par chaque visiteur. Donc je peux savoir qui est actuellement sur une page d'erreur et laquelle (l'url http://www.developpez.net/error.php?err=404 sera enregistrée dans la table des sessions).
    Par contre, viewonline ne peut pas interroger les variables d'environnement (SCRIPT_URI, REDIRECT_URL, REDIRECT_QUERY_STRING, etc.) de tous ces visiteurs pour connaitre l'url qu'ils cherchaient à atteindre quand ils se sont retrouvés sur une page d'erreur.

    Il faudrait que cette info soit dans cette dernière url visitée, en paramètre. Exemple : "http://www.developpez.net/error.php?err=404&url=http://www.developpez.net/fichierBidon.html"

    Voilà pourquoi je dis que bien évidement je peux récupérer cette url dans error.php mais que mon besoin est ailleurs.
    J'aimerais faire rajouter cette url en paramètre depuis htaccess.

    Citation Envoyé par _Mac_ Voir le message
    Pourquoi parles-tu de redirection alors que le navigateur, dans le cas d'une erreur 404 gérée par ErrorDocument 404, n'est pas redirigé ?
    Parce que je ne suis manifestement pas assez spécialiste pour utiliser le bon vocabulaire. Dsl

    Merci

  4. #4
    Rédacteur
    Avatar de _Mac_
    Profil pro
    Inscrit en
    Août 2005
    Messages
    9 601
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 9 601
    Points : 12 977
    Points
    12 977
    Par défaut
    Non, ce n'est pas une question de vocabulaire : faire ErrorDocument 404 /... ne redirigera pas dans l'absolu le navigateur. Dans ce cas, si tu fais par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ErrorDocument 404 /error.php
    l'idée c'est que error.php, qui peut effectivement récupérer l'URL en 404 car c'est la valeur de $_SERVER["REQUEST_URI"] ou un truc du genre, logue cette URL dans une table avec le nom de l'utilisateur et la date par exemple, et que cette table soit aussi "requêtée" par viewonline.php (ou tu utilises la même table que celle déjà utilisée par viewonline.php, peu importe).

    La difficulté de la chose c'est de savoir si tu peux t'appuyer sur le mécanisme du ErrorDocument. Si oui, c'est ce que j'ai donné, si non, par exemple si c'est le moteur du forum qui fait la redirection sans vraiment passer par les erreurs 404, c'est tout de suite plus délicat et il faut effectivement faire en sorte que la redirection (mais qui fait la redirection ? Pas Apache, en tout cas sauf si on a ErrorDocument 404 http://...) rajoute l'URL initiale dans l'URL.

    L'autre solution consisterait à utiliser le referrer (en-tête Referer : $_SERVER["HTTP_REFERER"]) dans la page sur laquelle le navigateur est redirigé sans passer par une variable d'URL mais ce n'est pas 100% comme solution car certains navigateurs, pare-feu, proxies, etc. suppriment cet en-tête pour des raisons de sécurité.

    Du détail, du détail, du détail !!!
    Revenons à la source : lisons la documentation et les fichiers de trace, la réponse à notre problème s'y trouve sans doute

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 42
    Points : 25
    Points
    25
    Par défaut
    Citation Envoyé par _Mac_ Voir le message
    ...l'idée c'est que error.php, qui peut effectivement récupérer l'URL en 404 car c'est la valeur de $_SERVER["REQUEST_URI"] ou un truc du genre, logue cette URL dans une table avec le nom de l'utilisateur et la date par exemple, et que cette table soit aussi "requêtée" par viewonline.php (ou tu utilises la même table que celle déjà utilisée par viewonline.php, peu importe).
    C'était effectivement ma bouée de secours. Mais en posant ma question ici j'essayais d'éviter un accès à la base de donnée

    Citation Envoyé par _Mac_ Voir le message
    La difficulté de la chose c'est de savoir si tu peux t'appuyer sur le mécanisme du ErrorDocument. Si oui, c'est ce que j'ai donné, si non, par exemple si c'est le moteur du forum qui fait la redirection sans vraiment passer par les erreurs 404, c'est tout de suite plus délicat et il faut effectivement faire en sorte que la redirection (mais qui fait la redirection ? Pas Apache, en tout cas sauf si on a ErrorDocument 404 http://...) rajoute l'URL initiale dans l'URL.
    Oui je peux. C'est moi qui l'ai mis en place (fichier .htaccess > ErrorDocument > fichier error.php).
    Le forum est phpBB et il ne gère pas de redirection pour ce genre de cas de figure.

    Citation Envoyé par _Mac_ Voir le message
    L'autre solution consisterait à utiliser le referrer (en-tête Referer : $_SERVER["HTTP_REFERER"]) dans la page sur laquelle le navigateur est redirigé sans passer par une variable d'URL mais ce n'est pas 100% comme solution car certains navigateurs, pare-feu, proxies, etc. suppriment cet en-tête pour des raisons de sécurité.
    Aujourd'hui, comme tu me l'as fait remarqué, il n'y a pas de redirection (ce que je constate dans l'url du navigateur, même si je t'avoue que du coup je pige pas vraiment comment il ouvre quand même error.php). Donc ce cas ne fonctionne pas.

    Bref. En clair ce que tu dis c'est que ce que je demande (rajouter un paramètre dans l'url) n'est pas possible dans htaccess ?
    Et que dans mon cas il ne reste que la solution de la BD ?
    Pas d'url rewriting pour compléter l'url non plus ?

    Merci de tes réponses !

  6. #6
    Rédacteur
    Avatar de _Mac_
    Profil pro
    Inscrit en
    Août 2005
    Messages
    9 601
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 9 601
    Points : 12 977
    Points
    12 977
    Par défaut
    On a du mal à se comprendre sur le terme "redirection", j'ai l'impression : quand il y a erreur 404, quelle URL est affichée dans ton navigateur ? Tu dis dans ton dernier message qu'il n'y a pas redirection (donc que le navigateur continue à afficher l'URL qui n'existe pas) alors que dans le message précédent, tu indiques que l'URL de la page 404 est http://www.developpez.net/error.php?err=404 Comment c'est possible ?

    Citation Envoyé par -=ET=- Voir le message
    En clair ce que tu dis c'est que ce que je demande (rajouter un paramètre dans l'url) n'est pas possible dans htaccess ?
    Si, c'est possible, mais en bidouillant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ErrorDocument 404 /error404.php
     
    RewriteEngine on
    RewriteRule ^error404\.php %{THE_REQUEST} [C]
    RewriteRule \ (.*)\  /index.php?url=$1 [R,L]
    Le fichier error404.php n'existe pas, il est juste là pour activer le bloc de RewriteRule du dessous. Mais dans ton cas, je ne sais pas si ça va marcher : ça ne marche que si c'est effectivement Apache qui décide de déclencher l'erreur 404 et d'afficher error404.php.

    Mais je ne voudrais pas proposer une solution qui n'est pas la bonne. En théorie, une erreur 404 se gère de la façon suivante : l'URL affichée dans le navigateur ne change pas, c'est celle de la page en 404, le serveur renvoie au navigateur un statut HTTP 404 avec éventuellement le code HTML d'une jolie page. Le navigateur choisit alors d'afficher le code HTML renvoyé par le serveur ou afficher sa propre page d'erreur 404. Le fait que le navigateur puisse choisir de ne pas afficher le code HTML renvoyé peut gêner. Du coup, certains sites/applications préfèrent rediriger le navigateur vers une URL dite d'erreur mais sans renvoyer le code 404 au navigateur (un code 301 ou 302 est renvoyé à la place). D'un strict point de vu HTTP, ce n'est pas bien.

    Du détail, du détail, du détail !!!
    Revenons à la source : lisons la documentation et les fichiers de trace, la réponse à notre problème s'y trouve sans doute

Discussions similaires

  1. Réponses: 2
    Dernier message: 23/01/2009, 20h00
  2. Avertissement à cause d'une erreur dans l'URL
    Par ranell dans le forum Langage
    Réponses: 3
    Dernier message: 03/03/2008, 17h44
  3. mettre un message d'erreur dans une table
    Par sam01 dans le forum SQL Procédural
    Réponses: 1
    Dernier message: 16/12/2006, 16h56
  4. Réponses: 6
    Dernier message: 15/06/2006, 14h07
  5. Récupérer URL en erreur sur 404
    Par TicTacToe dans le forum Langage
    Réponses: 6
    Dernier message: 28/02/2006, 12h58

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo