Erreur 404 validée?

WRInaute occasionnel
Bonjour,

J'ai ceci dans mon .htaccess :
Code:
ErrorDocument 404 /?404=1

Et ceci dans mon index.php :
Code:
    if ($_GET["404"] == 1) {
    
    header("Location: http://www.mondomaine.com/erreur404.php");
    exit;
    
    }

J'ai fait ça pour être certain que la page d'erreur soit à la racine du site (ce dont j'ai besoin pour d'autres raisons).
Cela m'évite aussi de faire appel à une redirection 301 qui peut générer du duplicate content.

Bref, j'aimerais savoir si cette methode retourne bien un message 404 valide aux moteurs de recherche.

Qu'en pensez-vous?

Merci pour votre aide :)
 
WRInaute passionné
il faut plutôt faire un include pour que l'erreur 404 reste :
Code:
 if ($_GET["404"] == 1) {
   
    include("./erreur404.php");
    exit;
   
    }
 
WRInaute accro
Dasn ce cas forty, n'auras tu pas une 200 puis une 404 (voire pas de 404 selon la version des Header) ?

Je préconise sur la 404 et avant le Location :
header("Status: 404 Not Found", false, 404);
 
WRInaute occasionnel
forty a dit:
là tu fais une redirection 302 avec la fonction header

Merci ... mais je peux savoir pourquoi?
Je veux dire, le .htaccess envoit bien un statut 404 au spider, après ce qui se passe ensuite n'est-il pas superflu?
 
WRInaute passionné
la directive ErrorDocument génère bien une erreur 404. Il suffit juste d'afficher directement la page d'erreur (sans faire de redirection).
 
WRInaute occasionnel
milkiway a dit:
Dasn ce cas forty, n'auras tu pas une 200 puis une 404 (voire pas de 404 selon la version des Header) ?

Je préconise sur la 404 et avant le Location :
header("Status: 404 Not Found", false, 404);

Merci!
Quelqu'un d'autre peut-il me confirmer que cette methode est la bonne dans ce cas de figure?
 
WRInaute occasionnel
forty a dit:
la directive ErrorDocument génère bien une erreur 404. Il suffit juste d'afficher directement la page d'erreur (sans faire de redirection).

En quoi faire une redirection ensuite annule-t-il l'action de la directive ErrorDocument ?
Le truc c'est que j'ai absolument besoin de faire une redirection.
L'include ne me convient pas dans ma situation.
Merci encore :)
 
WRInaute accro
sleidia, attend un peu avant les modifs. Il faut avoir plusieurs avis.
Moi également, l'include n'est pas trop réalisable et je passe par les header location.
 
WRInaute passionné
il n'y a qu'un statut retourné par chaque page. Si tu fais une redirection tu vas avoir l'appel de la page manquante qui va générer une redirection 302 et l'appel de la page erreur404.php qui va générer un statut 200. Les moteurs vont donc voir un statut 200 au lieu de 404. Si tu ne veux pas faire d'include tu peux peut-être utiliser :
Code:
if ($_GET["404"] == 1) {
   
    echo file_get_contents("http://www.mondomaine.com/erreur404.php");
    exit;
   
    }
 
WRInaute accro
Forty,

Tes deux systèmes renvoient exactement la même chose que Location :
Code:
HTTP/1.1 302 Found
Date: Wed, 17 Mar 2010 07:53:49 GMT
Server: Apache/2.2.X (OVH)
X-Powered-By: PHP/4.4.9
Location: http://www.URL.com/404
Vary: Accept-Encoding
Content-Type: text/html


HTTP/1.1 404 Not Found
Date: Wed, 17 Mar 2010 07:53:49 GMT
Server: Apache/2.2.X (OVH)
Content-Location: 404.php
Vary: negotiate,Accept-Encoding
TCN: choice
X-Powered-By: PHP/4.4.9
Content-Type: text/html
Si en plus de ça on avait HTTP/1.0, le seul code renvoyé serait un 302.
 
WRInaute occasionnel
Désolé Forty mais je ne comprends pas du tout la logique de ton explication :(

D'après ce que je compends, chronologiquement on a :

1. appel de l'url erronnée
2. "ErrorDocument 404 /?404=1" envoit un statut 404 au spider
3. redirection vers erreur404.php (qui génère effectivement un statut 200)

Bon, c'est où que j'ai tout faux? ;)
 
WRInaute passionné
tu as deux solutions :
- soit /?404=1 affiche juste un contenu explicatif de la page manquante sans faire de redirection (dans ce cas il y a un statut 404 renvoyé par ErrorDocument)
- soit /?404=1 fait une redirection vers une autre page. Si cette page existe elle renvoi automatiquement un statut 200. Dans ce cas il faut forcer le statut 404 pour que ce soit logique. il faut donc ajouter à cette page :
Code:
header("Status: 404 Not Found", false, 404);
 
WRInaute accro
forty a dit:
ca peut aussi marcher si le header 404 est ajouté à la page erreur404.php
Non, le raisonnement donné juste au dessus est bon.
Le serveur trouve la page = envoie d'un code
On lui fait manger un 404 = envoie du second code, uniquement valide en HTTP 1.1
 
WRInaute occasionnel
Merci :)

"uniquement valide en HTTP 1.1"

Désolé mais ... comment fait-on pour s'assurer qu'on est bien en HTTP 1.1?
 
WRInaute accro
sleidia a dit:
J'ai fait ça pour être certain que la page d'erreur soit à la racine du site (ce dont j'ai besoin pour d'autres raisons).
Tu veux éviter un problème, mais tu en crées plusieurs autres et tu te perds dans les redirections.

Je ferais simplement ceci:
Code:
ErrorDocument 404 /erreur404.php
en mettant dans /erreur404.php ce qu'il faut pour gérer les liens relatifs ou absolus.

Jean-Luc
 
WRInaute accro
En fait, il n'y a pas de solution. La page contenant la condition étant forcément trouvée, il y aura toujours deux codes header différents générés.
Le figaro ne s'embête pas et redirige... vers la home.
 
WRInaute accro
sleidia a dit:
J'ai ceci dans mon .htaccess :
Code:
ErrorDocument 404 /?404=1

Et ceci dans mon index.php :
Code:
    if ($_GET["404"] == 1) {
    
    header("Location: http://www.mondomaine.com/erreur404.php");
    exit;
    
    }

J'ai fait ça pour être certain que la page d'erreur soit à la racine du site (ce dont j'ai besoin pour d'autres raisons).
Cela m'évite aussi de faire appel à une redirection 301 qui peut générer du duplicate content.

Bref, j'aimerais savoir si cette methode retourne bien un message 404 valide aux moteurs de recherche.

Ce n'est pas possible. Soit tu envoies un 404, et l'URL ne change pas, soit tu envoies un 302, et l'URL change. Dans le cas présente tu envoies juste un 302 (suivi d'un 200 ou d'un 404 suivant que /erreur404.php existe ou pas).

La vraie question c'est pourquoi est-ce-que tu as besoin que la page d'erreur soit à la racine du site? Si c'est une question de liens relatifs et tout ça, tu peux toujours mettre un <base href="/"> dans ta page d'erreur...

Jacques.
 
WRInaute occasionnel
Okay, j'ai en fin de compte suivi la méthode la plus conventionnelle, à savoir :

Code:
ErrorDocument 404 /_404.php

... sans aucune redirection, ce qui m'a valu quelques heures de travail vu que mon CMS n'était pas prévu pour ça à la base.

Merci à tous pour votre aide :)
 
WRInaute accro
J'ai pas compris là.

Je pensais que le scenario était le suivant :
Un visiteur arrive sur ton site, il visite une page. Exemple un article.
Si la requete pour trouver l'article est ok, tu l'affiches, sinon 404.

Non ?
 

➡️ Offre MyRankingMetrics ⬅️

pré-audit SEO gratuit avec RM Tech (+ avis d'expert)
coaching offert aux clients (avec Olivier Duffez ou Fabien Faceries)

Voir les détails ici

coaching SEO
Discussions similaires
Haut