Version complète: sur le forum Webmaster Hub : renvoyer une erreur 404 en php
Webmaster Hub > Création et exploitation de Sites Internet > Les langages du Net > PHP
-ZN-
Bonjour à toutes et à tous,

j'ai un petit souci de rewriting avec un de mes sites, et il faudrait que mon code php renvoie une erreur 404 si il ne trouve pas les infos dans ma BDD (en gros mon rewriting passe des parametres à un script).

Notez que dans mon htaccess j'ai la ligne ErrorDocument 404 /sorry-404.php

Est ce qu'en PHP le code suivant suffit?

CODE
header('HTTP/1.0 404 Not Found');
exit;


faut-il rajouter qq chose pour que l'internaute (et googlebot) soit renvoyé vers ma page sorry-404.php ?

merci d'avance pour vos conseils,

ZN
steph13
Bonjour,


Ça ne serait pas plutôt :

CODE
header('location: mapage404.php');
captain_torche
steph13 : non, tu renverrais une entête 301.

-ZN-, dans le principe, ça devrait fonctionner. Tu as une version en ligne, qu'on puisse tester ?
-ZN-
Merci pour vos réponses,

en fait voila une adresse valide:
http://www.expat-blog.com/fr/destination/oceanie/australie/

et une non valide:
http://www.expat-blog.com/fr/destination/oceanie/australia/ (le nom du pays n'est pas bon)

j'aimerai bien que l'internaute soit renvoyé vers ma 404, c'est quand meme mieux qu'une page toute blanche wink.gif
Dan
La "non-valide" retourne bien une entête 404...
Il te manque juste :
CODE
header('location: /mapage404.php');

avant le
CODE
exit;

de ton exemple.
Jeanluc
CODE
header('location: ...');
C'est compatible avec un code 404 ? Je pensais que cela s'employait uniquement pour des redirections.

Jean-Luc
Dan
Ben oui, on renvoie d'abord l'entête, puis la page... wink.gif

Il faut juste éviter de mettre une URL complètement qualifiée (commençant par http://) si on veut garder l'entête 404.
Jeanluc
On apprend tous les jours sur le Hub. a_thumbsup_20.gif

Jean-Luc
Dan
Tu me fais douter maintenant ... je fais un test wink.gif

Manifestement l'entête 404 n'est pas préservée... et de plus les RFC disent que pour le header("location:...") il faut utiliser une URL complète.
Dan
En envoyant ceci (contenu de la page test.php)

CODE
<?php
header('location: index.php', TRUE, 404);
exit();
?>


J'ai ceci comme entêtes :
CODE
URL: http://www.webmaster-hub.com/test.php
HTTP/1.1 404 Not Found
Date: Thu, 13 Nov 2008 18:02:20 GMT
Server: Apache
location: index.php
Vary: User-Agent
Content-Length: 0
Connection: close
Content-Type: text/html

Redirection vers :
URL: http://www.webmaster-hub.com/index.php
HTTP/1.1 200 OK
Date: Thu, 13 Nov 2008 18:02:20 GMT
Server: Apache
Set-Cookie: ibf_session_id=828aa75868115f326c6b90bef2f7b355; path=/; domain=.webmaster-hub.com; httponly
Cache-Control: no-cache, must-revalidate, max-age=0
Expires: 0
Pragma: no-cache
Vary: User-Agent
Transfer-Encoding: chunked
Content-Type: text/html;charset=iso-8859-1

Donc j'ai bien une 404 ... mais elle est suivie par une entête 200 (normal vu que la page index.php existe)
Jeanluc
Dan,

Tes tests donnent des résultats étonnants, même si ce ne sont pas tout à fait ceux espérés. Je pense qu'il faut rester prudent avec le code 200 qui suit un code 404: pas sûr que tous les navigateurs vont suivre ce genre de redirection qui n'en est pas vraiment une.

En pratique, je préférerais placer un include de la page sorry-404.php juste après l'envoi du code 404. Cela devrait donner le résultat recherché par -ZN-.

Jean-Luc
-ZN-
Merci à tous les deux pour vous être penché sur mon problème, en effet, c'est "pointu" comme truc, et dès que c'est un peu pointu, je viens chercher des réponses sur le hub wink.gif

Jean Luc, tu penses à ça ?

CODE
<?php
header('HTTP/1.0 404 Not Found');
include('sorry-404.php');
exit;
?>


Je vais continuer à chercher des infos à ce sujet
Jeanluc
Oui, si sorry-404.php est bien dans le même répertoire que test.php.

Jean-Luc
Remi
CITATION(-ZN- @ vendredi 14 novembre 2008 à 11:47) *
CODE
<?php
header('HTTP/1.0 404 Not Found');
include('sorry-404.php');
exit;
?>


Oui, c'est la technique que j'utilise :
On définit l'en-tête comme étant un 404
puis on include le code traitant (et affichant) l'erreur.

Il ne faut pas faire de 'location' sinon on a une redirection.
-ZN-
Super merci beaucoup je vais mettre ça en place ce week end, avec cette technique je répare qq problèmes de rewriting, qui remontaient sans cesse dans la console google webmaster tools. Reste à voir si ça aura une influence positive sur l'internaute et les moteurs de recherche, ou rien du tout?

A bientôt,

ZN
Ceci est une version "bas débit" de notre forum. Pour voir la version complète avec plus d'information, la mise en page et les images, veuillez cliquer ici.