Aller au contenu

gérer les erreurs 404


Sujets conseillés

Bonjour,

J'ai un problème sur un site. Les anciennes url dynamique étaient de la forme

370-a.htm grace à un url-rewriting.

Cela a permit de bien placer un certaine nombre de pages dans Google.

Maintenant, pour améliorer encore le référencement, j'ai des url de la forme motclef.htm.

Forcément c'est mieux, mais pour le moment je vois dans les logs que les gens arrivent sur le site via google et via les anciennes url et tombent donc sur une erreur 404.

j'ai essayé de gérer celle-ci avec htaccess, mais cela ne fonctionne pas, vraisemblablement à cause de l'urlrewriting.

Donc comment puis-je faire pour gérer tous ses problèmes SVP et notamment le problème des redirections des anciennes urls vers les nouvelles qui correspondent?

Merci d'avance

Lien vers le commentaire
Partager sur d’autres sites

Le mieux est de faire ça directement au début de la page en testant le REQUEST_URI :

<?php
if (eregi("370-a.html",$_SERVER[REQUEST_URI]))
{
// redirection permanente vers les nouvelles pages rewritées
header("HTTP/1.1 301 Moved Permanently");
header("Location:http://www.tonsite.com/motcle.htm");
header("Connection: close");
exit;
}

Cordialement,

Modifié par jeroen
Lien vers le commentaire
Partager sur d’autres sites

Merci pour ta répone jeroen

Mais comment je fais pour rediriger TOUTES les anciennes pages avec une URL de la forme 352.htm ou 352-e.htm vers la page d'accueil (vu que je ne me vois pas entrer 400 redirections de pages distinctes dans le bout de code que tu m'as donné ) ?

Je ne peux pas mettre un truc du genre [(1-9)+], c'est pour l'url rewriting ça?

Et ce bout de code je le place absolument tout en haut de l'index ? (vu que tous les fichiers sont inclus via des conditions dans l'index.php)

Modifié par recherche_webmaster
Lien vers le commentaire
Partager sur d’autres sites

Bonsoir,

si tu souhaites obtenir une expression régulière pour que cela face le travail de redirection pour toutes tes anciennes pages soit une directive RedirectMatch, une directive RewriteRule ou même le script de jeroen, il me faudrait plus de détails sur l'implémentation des anciens noms de fichier (ou plutôt les règles que tu utilisait avant pour effectuer le rewritting)...

Il faudra aussi faire attention à ce que les nouvelles pages ne s'entre coupe pas avec les anciennes...c'est à dire que les nouvelles pages ne correspondent pas à l'expression que tu vas utiliser pour les anciennes dénomminations.

Lien vers le commentaire
Partager sur d’autres sites

Bonsoir TheRec,

Alors voici une ligne de mon ancien .htaccess :

RewriteRule ^([0-9]+)-([a-z])\.htm$  /?mot=$1&lettre=$2 [L]

Cela permettait d'arriver, par exemple, à la page "crêpe" via l'url 202-c.htm

Le nouveau fichier .htaccess :

[CODE]RewriteRule ^([a-z-]+)\.htm$  /?mot=$1 [L]
on arrive à la page crêpe via l'url crepe.htm

Soit je fais une redirection page par page, c'est lourds, soit une redirection globale des anciennes url vers l'accueil, ça peut aller, soit je génère un fichier 404 personnalisé, mais j'ai eu beau essayer, rien à faire.

Modifié par recherche_webmaster
Lien vers le commentaire
Partager sur d’autres sites

Ha..on a posté pratiquement ensemble... tu peux utiliser la directive RedirectMatch en utilisant cette syntaxe :

http://httpd.apache.org/docs/1.3/mod/mod_a...l#redirectmatch

Tu peux aussi utiliser une RewiteRule si tu te sent plus à l'aise avec ceci et utiliser le flag R. Mais ton problèmse se situe plutôt dans le fait que les anciens nom n'ont plus aucun rapport avec les nouveaux. Il te faudra donc passer comme jeroen te l'a dit pas une redirection avec PHP qui fera la translation entre l'ancien nom, depuis les deux paramètres (le nombre et la lettre de tes anciennes url) et qui redirigera vers la nouvelle page correspondant avec l'url qui est formée du titre (je suppose) de ton article, ou message de forum, ou quoi que ce soit...

Lien vers le commentaire
Partager sur d’autres sites

Le mieux serait à mon avis de rediriger les anciennes pages vers les nouvelles pages (et pas vers l'index)

Si tes pages sont tirées d'une base de donnée, c'est trés simple de fabrique une redirection mais il faut, comme le précise TheRec, un peu plus d'éléments...

[edit] Avec un train de retard...

Modifié par jeroen
Lien vers le commentaire
Partager sur d’autres sites

C'est donc bien ça..tu es obligé de passer par du PHP (ou en tout cas un language serveur) qui s'occupe de ta redirection... ce que tu peux faire c'est utiliser ton ancienne règle (tu es ainsi sûr que tes visiteurs sont bien redirigés) et les envoyer avec celle-ci vers ta page qui s'occupera des redirections...par exemple :

RewriteRule ^([0-9]+)-([a-z])\.htm$  /newpage.php?mot=$1&lettre=$2 [L]

Puis dans ta page newpage.php tu utilise en partie le code de jeroen, sauf que tu effectue une requête dans ta base de données pour trouver le "titre" de ta nouvelle page et tu l'utilises comme ceci :

header("HTTP/1.1 301 Moved Permanently");
header("Location:http://www.tonsite.com/".$titre.".htm");
header("Connection: close");
exit;

Tu peux même dans cette page gérer les pages qui auraient été supprimées entre temps, si les deux variables ne donnent aucun résultat lors de la requête dans ta base de données tu envoies le header d'une erreur 404 :

header("HTTP/1.0 404 Not Found");

** EDIT ** Ahhhh les joies des réponses "rapides" ;)

Modifié par TheRec
Lien vers le commentaire
Partager sur d’autres sites

Avant il se basait sur l'ID, maintenant il n'utilise plus cela mais juste un titre qui est sûrement unique... (pitié rassure moi, il est unique hein !?)

PS: Tout ça pour le Dieu Référencement :fou: (non mais je te comprends...j'ai fait pareil il n'y a pas si longtemps...quoi que je parasite l'url avec l'id, ce qui m'évite de créer un champ unique basé sur une chaîne de caractères)

Modifié par TheRec
Lien vers le commentaire
Partager sur d’autres sites

ce que tu peux faire c'est utiliser ton ancienne règle (tu es ainsi sûr que tes visiteurs sont bien redirigés) et les envoyer avec celle-ci vers ta page qui s'occupera des redirections...par exemple :

C'est pas idiot du tout ton truc TheRec. J'ai essayé un truc dans le genre mais dans l'index je disais :

si lil y al es variables $lettre ou $mot on inclu tel fichier.

Mais j'avais une 404 quand même.

Puis dans ta page newpage.php tu utilise en partie le code de jeroen, sauf que tu effectue une requête dans ta base de données pour trouver le "titre" de ta nouvelle page et tu l'utilises comme ceci :

oui parce que par contre les id sont resté les mêmes.

ah ça se creuse les gars, je vais trouver un truc, 2 mn ;)

**edit**

oui le titre est unique

En fait avant j'avais un id et un titre genre crêpe.

Maintenant j'ai un id, un titre, et un titre avec le mot clef en l'occurence crepe ou alors gateau-aux-poires si le titre est gâteaux aux poires.

Effectivement ça fait un champ de plus à remplir mais les urls sont beaucoup plus parlante.

Modifié par recherche_webmaster
Lien vers le commentaire
Partager sur d’autres sites

OK...alors ce que je t'ai dit est la bonne méthode dans ce as...

Ton problème n'est en aucun cas solvable par URL Rewritting (oui tu veux faire une règle par article mais ce n'est pas viable ni optimal. La redirection paraitra transparent aux utilisateurs si ton fichier ne contient que la redirection et de même pour les moteurs de recherche... que demande le peuple hein ?

Modifié par TheRec
Lien vers le commentaire
Partager sur d’autres sites

y'a un truc qui me chiffone là :

Les visiteurs arrivent par l'url 400-c par exemple.

Je reprend donc dans mon htaccess la règle de réécriture qui correspondait à ce type d'url. Mais le serveur va t-il y détecter des variables puisqu'elles ne sont pas transmise par l'url d'un lien interne pas exemple?

**edit** je crois que ma question est un peu crétine après coup non ? ça parait évident sinon aucun site ne fonctionnerait je crois ...

Modifié par recherche_webmaster
Lien vers le commentaire
Partager sur d’autres sites

Non le cas que tu nous a présenter est celui-ci, tes utilisateurs arrivent sur ton site par les anciennes URL qui sont actuellement dans l'index de Google (entre autres). Ces URL gérée par cette règle avec ma méthode :

RewriteRule ^([0-9]+)-([a-z])\.htm$  /newpage.php?mot=$1&lettre=$2 [L]

Dans la page newpage.php, tu vas gérer une redirection manuelle en fonction des deux paramètre (à l'aide de $_GET['mot'] et $_GET['lettre']). Ton boulot sera de faire la requête dans ta base de données avec ces paramètres pour trouver le titre de l'article correspondant. Une fois l'article trouvé tu utilise une redirection par header comme celle que je t'ai indiquée précédemment.

**EDIT** Ben euh oui...c'est sûrement pour ça que j'avais l'impression de me répéter un peu dans ce dernier message ;)

Modifié par TheRec
Lien vers le commentaire
Partager sur d’autres sites

Bon alors je viens d'essayer un truc super simple qui me donne d'une manière assez inattendu un résultat tout de même potable :

j'ai donc repris dans le nouveau htaccess l'ancienne ligne de réécriture.

Je n'ai mis aucune ligne de redirection, header ou autre. J'ai simplement rajouté dans la requête qui allait chercher les pages en fonction du motclef.htm :

OR id='ancienneVariable'.

Maintenant toutes les url de la forme: 400-c.htm retourne à la page d'accueil du site. Donc ça marche à moitié : je n'ai pas la page précise qui correpond à l'id mais au moins je n'ai plus d'erreur 404 c'est déjà ça.

Maintenant je voudrais comprendre ....

Lien vers le commentaire
Partager sur d’autres sites

Disons que j'ai cru y arriver plus vite avec mon système, mais je vais approfondir la question (sois tranquille TheRec même si je ne prend pas ta solution à l'identique, déjà ça a considérablement amoindri le problème).

Une question là :

Les anciennes urls indexées par google et sous la forme 400-b, que vont-elles devenir maintenant qu'elles conduisent toutes à l'accueil?

Que va faire le googlebot?

Modifié par recherche_webmaster
Lien vers le commentaire
Partager sur d’autres sites

Bon, c'est pas grave... ma solution résoud en un coup tes problèmes de référencement et tes problèmes d'utilisateurs qui viennent depuis d'anciennes adresses référencées (qui sont deux problèmes liés somme toutes)... Mais tu as tout à fait le droit de chercher une autre solution et je serais heureux de la lire quand tu l'auras trouvée...

En attendant je ne vais pas "m'épuiser" à te fournir une deuxième solution si la première que je t'ai indiquée fonctionne très bien. Ni à répondre des questions qui seraient réglées par "ma" solution...

Modifié par TheRec
Lien vers le commentaire
Partager sur d’autres sites

Veuillez vous connecter pour commenter

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



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