Jump to content
Sign in to follow this  
-ZN-

renvoyer une erreur 404 en php

Rate this topic

Recommended Posts

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?

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

Share this post


Link to post
Share on other sites

Bonjour,

Ça ne serait pas plutôt :

header('location: mapage404.php');

Share this post


Link to post
Share on other sites

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 ?

Share this post


Link to post
Share on other sites

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 ;)

Share this post


Link to post
Share on other sites

La "non-valide" retourne bien une entête 404...

Il te manque juste :

header('location: /mapage404.php');

avant le

exit;

de ton exemple.

Share this post


Link to post
Share on other sites

header('location: ...');

C'est compatible avec un code 404 ? Je pensais que cela s'employait uniquement pour des redirections.

Jean-Luc

Share this post


Link to post
Share on other sites

Ben oui, on renvoie d'abord l'entête, puis la page... ;)

Il faut juste éviter de mettre une URL complètement qualifiée (commençant par http://) si on veut garder l'entête 404.

Share this post


Link to post
Share on other sites

Tu me fais douter maintenant ... je fais un test ;)

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.

Share this post


Link to post
Share on other sites

En envoyant ceci (contenu de la page test.php)

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

J'ai ceci comme entêtes :

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)

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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 ;)

Jean Luc, tu penses à ça ?

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

Je vais continuer à chercher des infos à ce sujet

Share this post


Link to post
Share on other sites
<?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.

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×
×
  • Create New...