Php header 404 et sous-dossier

Nouveau WRInaute
Bonjour à tous,

Voilà mon soucis : j'ai ceci dans mon htaccess :

ErrorDocument 404 /index.php?error_message=404

ainsi toutes les erreurs 404 redirigent sur ma home avec un message d'erreur

ça marche nickel si je vais sur monsite.fr/blabla.htmlQSDF au lieu de monsite.fr/blabla.html

Mais pour monsite.fr/dir/article.php?id=2 qui est rewrité en monsite.fr/dir/article-super-titre
Si je vais sur monsite.fr/dir/article-super-titreQSDF
ça ne marche pas :(

dans cette page j'ai pourtant mis ceci :
if (!$id): header('HTTP/1.0 404 Not Found'); exit; endif;

mon code php marche mais ça me met une page 404 blanche classique et non pas celle définie dans mon htaccess :(

Quelqu'un aurait une idée sur mon soucis ?
merci d'avance
 
WRInaute accro
Bonjour,

zeb fait une redirection 302 vers la page d'accueil. Il ne faut pas faire de "header Location", mais un include du contenu que tu veux afficher.

Jean-Luc
 
Nouveau WRInaute
jeanluc tu veux dire que je dois, dans mon répertoire mettre mon template ?
je ne pense pas que ce soit la solution...

regardez la page de WRI :
https://www.webrankinfo.com/dossiers/google-search/menu-deroulant

si on tape : https://www.webrankinfo.com/dossiers/google-search/menu-deroulantQSDF
le fil d'ariane montre bien qu'on est pas dans /google-search/ avec un message d'include

Pour détailler mon /dir/ n'existe pas bien sûr !
Donc je souhaite que les erreurs 404 dans ce dir m'affiche la page ../index.php?error_message=404
 
WRInaute accro
jeanluc a dit:
mais un include du contenu que tu veux afficher.
Sauf que si tu envoie un header 404 not found avec le contenu de la home page tu va avoir X pages 404 en DC avec la home, ce qui peut être un bon truc pour planter tout le ref du site.
Le "location" ne sera pas forcement suivi par les moteurs (qui eux tiendront compte de la 404) et les visiteurs se retrouveront a l'accueil ce qui était le but recherché.

non ?
 
WRInaute accro
A mon humble avis, des pages 404 qui envoient un code 404 ne peuvent pas générer du DC. Par contre, si on fait une redirection 302 comme tu le suggères, le code 404 n'est pas envoyé et les 302, suivies d'un code 200, provoquent le DC.

Jean-Luc
 
WRInaute accro
Le deuxième type d'appel spécial est "Location:". Non seulement il renvoie un en-tête au client, mais, en plus, il envoie un statut REDIRECT (302) au navigateur tant qu'un code statut 201 ou 3xx n'a pas été envoyé.
En effet, je viens en plus de le lire et de faire un test il y a bien un 302 qui s'intercale c'est pas le pied.
Bien vu, je ne savais pas.
 
Nouveau WRInaute
bref il suffit de faire une 404.php et la mettre en htaccess, qu'elle soit en index=none avec l'include et basta

Mais vous ne répondez pas à ma question technique :(
Si je fais une 404.php (notée dans mon error document de htacces), si je suis dans un sous-dossier, ça ne marche pas, la redirection me montre une erreur 404 "classique" = page blanche, et pas ma page 404.php
 
Discussions similaires
Haut