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

Langage PHP Discussion :

[Système] header() et 404


Sujet :

Langage PHP

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    423
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2004
    Messages : 423
    Points : 188
    Points
    188
    Par défaut [Système] header() et 404
    Bonjour

    Je cherche à gérer des erreurs 404 avec PHP. J'ai tenté ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <?php
    //...
     
    header("HTTP/1.0 404 Not Found");
    header("Location: /Erreurs/erreur404.html");
    exit();
     
    //... 
    ?>
    la redirection se fait bien mais j'ai un code 302 en retour, et pas 404. Pourquoi ?

  2. #2
    Membre régulier Avatar de mickado
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    154
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 154
    Points : 85
    Points
    85
    Par défaut
    passe par un .htaccess pour gérer tes erreure ce serais plus simple non ?

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    423
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2004
    Messages : 423
    Points : 188
    Points
    188
    Par défaut
    Mon application est développée selon une architecture MVC. Toutes les URL sont composée de la même façon : index.php?class=MaClass&func=MaFonction. Le script vérifie que la classe et la fonction demandé existe avant de l'exécuter. Dans le cas contraire je voudrais retourner une erreur 404.

    Après réflexion, c'est peut-être normal le 302 puisque j'effectue une redirection. J'ai aussi essayé de mettre seulement le header("HTTP/1.0 404 Not Found"); et de faire la redirection dans le htaccess. Dans ce cas-là j'ai bien un code 404 mais je ne suis pas redirigé.

  4. #4
    Membre régulier Avatar de mickado
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    154
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 154
    Points : 85
    Points
    85
    Par défaut
    pourquoi une erreure 404 et pas une erreur que tu générerais toi meme ?

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    423
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2004
    Messages : 423
    Points : 188
    Points
    188
    Par défaut
    C'est ce que je faisait pour une partie à accès limité (login et pass). Si l'action n'existe pas, affichage d'un message d'erreur.

    Mais maintenant, je vais avoir une partie publique. Et dans ce cas-là je pense qu'il est préférable d'avoir une erreur 404 (pour éviter que des page n'existant pas ne soient référencée par exemple)

  6. #6
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 440
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 440
    Points : 15 814
    Points
    15 814
    Par défaut
    j'ai trouvé des informations dans les autres arguments de la fonction http://php.net/header
    essaye ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    <?php
    //...
     
    header('Location: /Erreurs/erreur404.html', TRUE, 404);
    exit();
     
    //... 
    ?>

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    423
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2004
    Messages : 423
    Points : 188
    Points
    188
    Par défaut
    ça ne va pas non plus. Mais je pense savoir pourquoi :

    - Dans le cas d'une redirection, d'après ce que j'ai compris, on a obligatoirement un code 302. On peut éventuellement avoir un status 404 en plus, mais dans ces cas-là, je ne sais pas comment réagissent les moteurs de recherche.

    - dans le cas d'un envoi d'un code 404 dans le header (sans redirection), je pense que la redirection (gérée par le htaccess) ne fonctionne pas tout simplement parce que Apache n'a aucune raison de renvoyer un code 404 puisqu'il a trouvé le fichier demandé (index.php). Dès que le script est exécuté, le htaccess n'intervient plus. Et comme la seule chose que je fait si l'action n'est pas valide est d'envoyer uniquement le code 404, j'obtiens une page blanche.


    J'ai finalement procédé ainsi :

    si l'action n'est pas correcte, je l'écrase par celle correspondant à mon erreur 404 (class=Erreurs et func=erreur404). finalement j'envoie un header "HTTP/1.0 404 Not Found". Ainsi le code 404 et ma page 404 personnalisée sont envoyées au navigateur/robot

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Système] header déjà envoyé par défaut
    Par Tchupacabra dans le forum Langage
    Réponses: 3
    Dernier message: 09/08/2007, 12h48
  2. [Système] Header redirection 301 et URL rewriting
    Par bobic dans le forum Langage
    Réponses: 6
    Dernier message: 16/04/2007, 21h23
  3. Réponses: 6
    Dernier message: 01/02/2006, 16h59
  4. [Système] header()
    Par corsamobile dans le forum Langage
    Réponses: 29
    Dernier message: 04/01/2006, 15h21
  5. [Système] Problème avec header() ...
    Par tom06440 dans le forum Langage
    Réponses: 15
    Dernier message: 27/10/2005, 22h33

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