-ZN- Posté 13 Novembre 2008 Posté 13 Novembre 2008 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
steph13 Posté 13 Novembre 2008 Posté 13 Novembre 2008 Bonjour, Ça ne serait pas plutôt : header('location: mapage404.php');
captain_torche Posté 13 Novembre 2008 Posté 13 Novembre 2008 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- Posté 13 Novembre 2008 Auteur Posté 13 Novembre 2008 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
Dan Posté 13 Novembre 2008 Posté 13 Novembre 2008 La "non-valide" retourne bien une entête 404... Il te manque juste : header('location: /mapage404.php'); avant le exit; de ton exemple.
Jeanluc Posté 13 Novembre 2008 Posté 13 Novembre 2008 header('location: ...'); C'est compatible avec un code 404 ? Je pensais que cela s'employait uniquement pour des redirections. Jean-Luc
Dan Posté 13 Novembre 2008 Posté 13 Novembre 2008 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.
Dan Posté 13 Novembre 2008 Posté 13 Novembre 2008 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.
Dan Posté 13 Novembre 2008 Posté 13 Novembre 2008 En envoyant ceci (contenu de la page test.php) <?phpheader('location: index.php', TRUE, 404);exit();?> J'ai ceci comme entêtes : URL: http://www.webmaster-hub.com/test.phpHTTP/1.1 404 Not FoundDate: Thu, 13 Nov 2008 18:02:20 GMTServer: Apachelocation: index.phpVary: User-AgentContent-Length: 0Connection: closeContent-Type: text/htmlRedirection vers :URL: http://www.webmaster-hub.com/index.phpHTTP/1.1 200 OKDate: Thu, 13 Nov 2008 18:02:20 GMTServer: ApacheSet-Cookie: ibf_session_id=828aa75868115f326c6b90bef2f7b355; path=/; domain=.webmaster-hub.com; httponlyCache-Control: no-cache, must-revalidate, max-age=0Expires: 0Pragma: no-cacheVary: User-AgentTransfer-Encoding: chunkedContent-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 Posté 13 Novembre 2008 Posté 13 Novembre 2008 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- Posté 14 Novembre 2008 Auteur Posté 14 Novembre 2008 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 ? <?phpheader('HTTP/1.0 404 Not Found');include('sorry-404.php');exit;?> Je vais continuer à chercher des infos à ce sujet
Jeanluc Posté 14 Novembre 2008 Posté 14 Novembre 2008 Oui, si sorry-404.php est bien dans le même répertoire que test.php. Jean-Luc
Remi Posté 14 Novembre 2008 Posté 14 Novembre 2008 <?phpheader('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- Posté 14 Novembre 2008 Auteur Posté 14 Novembre 2008 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
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant