Aller au contenu

renvoyer une erreur 404 en php


Sujets conseillés

Posté

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

Posté

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

Il te manque juste :

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

avant le

exit;

de ton exemple.

Posté

header('location: ...');

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

Jean-Luc

Posté

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.

Posté

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.

Posté

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)

Posté

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

Posté

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

Posté
<?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.

Posté

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

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...