Aller au contenu

Réécriture dURL et table de correspondance


mick38

Sujets conseillés

Bonjour,

A plusieurs reprises captain_torche fait allusion à l'utilisation d'une table de correspondance afin de gérer au mieux la réécriture d'URL, l'absence de l'id dans cette nouvelle URL, et le fait d'avoir une URL unique pour éviter le duplicate content.

http://www.webmaster-hub.com/topic/41413-des-mots-cles-dans-lurl/page__p__270651entry270651

http://www.webmaster-hub.com/topic/47992-vos-conseils-pour-la-reecriture/page__p__313048entry313048

http://www.webmaster-hub.com/topic/43415-google-naime-pas-lurl-rewriting/page__st__40__p__285395entry285395

Quelqu'un pourrait-il m'éclaircir à ce sujet ?

S'agit-t-il de 2 tables liées dans mySQL ou bien de tableaux gérés en php et générés à partir de données récupérées en base ?

Quelle est la bonne pratique lors de la réécriture dans le htaccess, une variable du genre $monNomDeFichier à la place de $id ?

Merci d'avance,

Mick

Lien vers le commentaire
Partager sur d’autres sites

Je suis le premier concerné, je m'explique donc derechef ;)

Dans ma structure de base de données, j'ai une table urls, composée de la manière suivante :

- un identifiant

- un type de page

- un id cible

- une url

Imaginons que mon site soit basé sur une hiérarchie "articles / rubriques".

Ma première rubrique aura comme titre "Rubrique numéro 1". Grâce à la fonction pour transformer un texte en url, il devient "rubrique-numero-1".

J'enregistre ces informations dans ma base de la manière suivante :

- type de page : rubrique

- id cible : 1

- url : rubrique-numero-1

Je fais de même avec le reste des pages. Pour l'article numéro 24, titré "mon super article de test !", on aura donc :

- type de page : article

- id cible : 24

- url : mon-super-article-de-test

Il faut ensuite, via le .htaccess, rediriger toutes ces urls vers une seule et même page (Ici, traitement.php) :

RewriteRule		(.*)\.html$							traitement.php?url=$1			[QSA,L]

Cette page fera quant à elle l'opération inverse :

Si on lui fournit l'url "mon-super-article-de-test", elle est capable, avec une simple requête, de trouver quel type de page afficher (ici, un article), ainsi que son identifiant (24). Le reste est relativement simple ;)

On peut même envisager encore mieux : imaginons que je renomme cette dernière page en "mon-super-article". On va également modifier l'url en conséquence. Mais plutôt que de modifier l'url déjà en base, on va en créer une autre :

- type de page : article

- id cible : 24

- url : mon-super-article

Tant qu'on n'en reste que là, on peut accéder au même contenu avec l'url "mon-super-article-de-test.html" et avec "mon-super-article.html". Il faut donc faire en sorte de rediriger l'ancienne url vers la nouvelle, de façon automatique.

On va ajouter dans notre page de traitement, le code suivant (On aura au préalable renseigné les variables $id_cible et $type_page avec les informations de l'url en cours) :

$sql_redirect = "SELECT url FROM urls WHERE id_cible = '$id_cible' AND type_page = '$type_page' ORDER BY ID DESC LIMIT 1";
$req_redirect = mysql_query($sql_redirect) or die(mysql_error());
$url_redirect = mysql_result($req_redirect, 0);
if($url_redirect != $url) {
header('Location: '.$url_redirect.'.html', true, 301);
die();
}

Dans le principe : on vérifie l'url d'index le plus élevé correspondant au type de l'article ainsi qu'à son id. Si cette url est différente de celle de la page actuelle, on effectue une redirection. De cette manière, on peut renommer indéfiniment les pages, le système fonctionnera. Attention toutefois à ne pas faire cette manipulation trop fréquemment; ce serait dommageable pour le référencement et le backlinking, même si la redirection automatique limite la casse.

Pour information, j'utilise cette méthode (dans une version un peu plus complexe, qui gère les différents utilisateurs) pour l'Onironaute. Et, si je ne m'abuse, c'est également ce système qui est utilisé dans les dernières versions de SPIP.

Lien vers le commentaire
Partager sur d’autres sites

Je fais de meme mais sans redirection et j'ai en plus dans cet index une colonne Template qui me renvoie dans différentes tables. Car la structure des articles n'est pas toujours la même :)

Pourquoi ne gères-tu pas directement l'affichage dans traitement.php ? La redirection a un coût.

Lien vers le commentaire
Partager sur d’autres sites

Et voila!

Merci captain ca valide une question que j'avais ... Nous utilisons un concept similaire dans ma boite pour gerer les redirections avec la creation d'une table "lookup" qui genere la redirection.

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...