formateur informatique

URL Rewriting en Php

Accueil  >  Technique  >  Php  >  Php Avancé  >  URL Rewriting en Php
Livres à télécharger


Pour partager cette vidéo sur les réseaux sociaux, voici son url absolue :

Pour l'intégrer sur votre site internet ou blog, vous pouvez l'embarquer :

Sujets et formations similaires :


Url Rewriting et référencement naturel

Dans cette formation Php, nous proposons d'achever les travaux réalisés lors des formations précédentes. La problématique est cruciale. Elle concerne le référencement naturel. Il s'agit d'un enjeu de taille pour tout site Web désireux de développer un fort trafic.

Remplir dynamiquement contenu page Web selon paramètre Url par code PHP

Dans le dernier volet de ces formations, nous avions construit dynamiquement le contenu d'une page Web, en fonction d'un paramètre passé dans l'URL. Cette valeur n'est autre que la clé primaire de l'enregistrement cliqué depuis la page d'extraction. Ce procédé est fort intéressant dans la mesure où il permet de créer une infinité de rubriques, à partir d'une seule page Html. Mais comme nous l'avions évoqué, il n'est pas pleinement satisfaisant. La forme de ces Url est pénalisante en termes de référencement. Elles sont toutes quasiment identiques. Seule la valeur du paramètre change. C'est pourquoi, nous devons mettre en oeuvre la technique de l'URL Rewriting pour créer des adresses pertinentes, intelligibles et explicitement différentes, pour chaque page appelée.

Tout ce que nous avons développé jusqu'alors reste vrai. Nos travaux consistent simplement à réaliser des adaptations, pour produire ces adresses uniques bénéfiques au référencement naturel.



Sources et présentation de la problématique
Nous devons commencer par récupérer les travaux bâtis au cours des formations précédentes. La décompression fournit de nombreux fichiers à la racine et des ressources externes dans les sous dossiers. Le fichier index.php correspond à la page Web d'accueil proposant les listes déroulantes reliées entre elles. Le fichier reponse.php renferme le code externalisé pour le traitement Ajax, afin de produire les résultats sans recharger la page initiale. Comme c'est elle qui restitue les enregistrements, c'est à partir de cette page que nous devons initier nos travaux. Le fichier fiche.php correspond à la page Web dont le contenu doit s'enrichir dynamiquement, en fonction du paramètre qui lui est passé dans l'URL. Et c'est précisément cette Url que nous souhaitons réécrire pour les besoins du référencement naturel. Enfin, vous notez la présence d'un fichier précieux nommé : .htaccess. Il s'agit d'un fichier d'initialisation et de paramétrage pour le serveur. C'est lui qui va notamment lui indiquer comment réagir par rapport à la signature de certaines Url.
  • Lancer EasyPhp,
  • Démarrer les deux serveurs (http et Database),
  • Cliquer alors sur le bouton Open du module MySql Administration,
Si vous avez suivi les formations précédentes, dans le volet de gauche, vous devez noter la présence de la base de données ids. Cette dernière doit proposer une table nommée liste_id.

Table de base de données MySql pour extraire les informations dynamiquement par le code PHP

Dans la formation précédente, nous avions importé la nouvelle structure de cette table pour intégrer le champ liste_descriptif. C'est lui qui fournit l'essentiel du détail permettant d'enrichir la page Web dynamique, selon le numéro de l'enregistrement cliqué.

Pour que le code Php puisse accéder à ces informations, un compte utilisateur doit être créé avec les droits administrateurs :
  • Nom d'utilisateur : codePHP,
  • Mot de passe : php123bd,
  • Nom d'hôte : Adresse locale, ici : 127.0.0.1,
Comme vous le savez, ce projet doit être référencé dans l'interface d'EasyPhp. Un nom doit lui être attribué comme url-rewriting par exemple. De même, l'adresse issue de l'explorateur Windows doit être désignée pour définir son emplacement. Dès lors, l'application apparaît listée dans les sites émulés par EasyPhp.
  • Cliquer sur son lien pour accéder à sa page d'accueil,
Si aucune erreur n'est à déplorer, cela signifie que vous avez correctement configuré le compte utilisateur.
  • Déployer la liste déroulante qui se propose,
  • Choisir un département : 83-Var par exemple,
Une seconde liste déroulante apparaît instantanément. Il s'agit de la liste des villes liées qui se construit automatiquement en fonction du choix émis dans la première liste.
  • Choisir une ville : Toulon par exemple,
Restitution dynamique en Php des informations de base de données en fonction des choix dans listes déroulantes Web liées

Tous les enregistrements concordants, soit toutes les idées de sorties situées dans la ville de Toulon pour le département du Var, sont aussitôt extraites. Aucun rechargement de la page n'a eu lieu grâce aux technologies Ajax. De même, vous constatez la présence d'une petite barre de navigation en dessous des résultats. Ce système de pagination propose à l'internaute de parcourir toutes les informations restituées, page à page.
  • Cliquer sur l'un des enregistrements, par exemple l'idée de sortie : La Corniche ***,
Nous sommes aussitôt redirigés sur la fiche de l'hôtel. Il s'agit de la page Web fiche.php dont le contenu s'enrichit en fonction du numéro de l'enregistrement cliqué, passé dans l'URL. Ici, ce numéro de clé primaire est le 888. C'est lui qui identifie de façon unique dans la base de données, l'enregistrement ainsi désigné. Mais pour les besoins du référencement, nous devons proposer une URL possédant la forme suivante : idee-la-corniche-toulon-888.html. Cette adresse est plus claire, unique et descriptive. Elle continue de porter le numéro de la clé primaire, essentiel au code Php de la page fiche.php pour adapter son contenu.
  • Revenir sur la page d'accueil en cliquant sur l'icône située à gauche dans le bandeau supérieur,


Traitement de chaines de textes
Une Url ne doit comporter ni espaces, ni accents, ni caractères spéciaux. C'est pourquoi, avant sa construction, nous devons retravailler la désignation de l'idée de sortie.
  • A la racine du dossier de décompression, double cliquer sur le sous dossier fonctions pour l'ouvrir,
  • Puis, cliquer droit sur le fichier traitement_chaine.php,
  • Dans le menu contextuel, choisir de l'ouvrir avec un éditeur comme le Notepad++,
Comme vous le constatez, ce fichier Php propose deux fonctions nommées respectivement supprAccents et supprSpeciaux. La première, comme son nom l'indique, remplace tous les accents par leurs homologues sans accents. La seconde remplace les caractères spéciaux recensés, par un tiret. D'ailleurs il conviendrait d'ajouter le symbole de l'étoile dans l'énumération, comme suit :

...
function supprSpeciaux($string){
$string = strtr($string, ''@'\/#,()*', '-----------');
$string = str_replace('--','-',$string);
return $string; }
...


Comme nous ajoutons un caractère spécial à remplacer en deuxième argument de cette fonction, nous devons ajouter un tiret de remplacement en troisième argument.
  • A la racine du dossier de décompression, cliquer droit sur le fichier reponse.php,
  • Dans le menu contextuel, choisir de l'ouvrir avec le Notepad,
Nous y retrouvons le code Php externalisé permettant notamment de restituer les données selon les choix recoupés. En début de code, vous notez la présence de la chaîne de connexion.

...
$liaison2 = mysqli_connect('127.0.0.1', 'codePHP', 'php123bd');
mysqli_select_db($liaison2, 'ids');
...


Elle rappelle les identifiants nécessaires pour la création du compte utilisateur dans PhpMyAdmin. La boucle while parcourt tous les enregistrements pour restituer les idées de sorties dans la page Web.

...
while($retour = mysqli_fetch_array($retours))
{
$chaine .= '<div style='float:left; width:190px; margin-left:10px; font-size:12px; text-align:left;'><a href='fiche.php?ID='.$retour['liste_num'].'' style='text-decoration:none; color:#666666;'>'.utf8_encode(str_replace('#', ''', $retour['liste_nom'])).'</a></div><div style='float:left; width:130px; font-size:10px; text-align:left;'>'.utf8_encode(str_replace('#', ''', $retour['liste_activite'])).'</div><br/>';
}
...


A ce titre, vous remarquez la présence du lien cliquable appelant la page fiche.php en lui passant en paramètre le numéro de l'enregistrement. C'est la partie dynamique située dans l'attribut href de ce lien que nous devons modifier. Mais avant cela, nous devons retravailler la désignation de l'idée de sortie, pour créer une url conforme. Nous avons besoin des deux fonctions consultées précédemment. Ce fichier externe doit être ajouté dans la construction.
  • Pour cela, adapter le code Php, selon les indications mentionnées en gras :
...
$depart = ($depart-1)*10;

$requete = 'SELECT liste_num, liste_nom, liste_activite, liste_ville FROM liste_id WHERE liste_dep=''.utf8_decode($le_dep).'' AND liste_ville=''.utf8_decode($la_ville).'' ORDER BY liste_nom LIMIT '.$depart.',10;';
$retours = mysqli_query($liaison2, $requete);
$chaine = ''; $url = '';

include('fonctions/traitement_chaine.php');

while($retour = mysqli_fetch_array($retours))
{
$url ='idee-'.supprAccents(supprSpeciaux(strtolower($retour['liste_nom'].'-'.$retour['liste_ville']))).'-'.$retour['liste_num'].'.html';
$chaine .= '<div style='float:left; width:190px; margin-left:10px; font-size:12px; text-align:left;'><a href=''.$url.'' style='text-decoration:none; color:#666666;'>'.utf8_encode(str_replace('#', ''', $retour['liste_nom'])).'</a></div><div style='float:left; width:130px; font-size:10px; text-align:left;'>'.utf8_encode(str_replace('#', ''', $retour['liste_activite'])).'</div><br/>';
}

$chaine.= '<div style='float:left; width:320px; margin-right:10px; font-size:12px; text-align:right;'>';
...


Tout d'abord, dans l'énumération des champs de la requête SQL, nous ajoutons le champ liste_ville. Nous avons besoin de récupérer son information pour la construction de l'Url. Puis, nous déclarons la variable $url. Grâce à l'instruction include, nous ajoutons la référence au fichier : traitement_chaine.php. Désormais, nous pouvons donc appeler et exploiter ses deux fonctions par leurs noms. Ensuite, nous construisons l'Url dynamique de chaque enregistrement, à chaque passage dans la boucle. Nous la préfixons du terme statique idee. Nous l'assemblons avec le nom de l'idée de sortie suivi de sa ville, tous deux séparés d'un tiret. Nous prenons soin de les imbriquer dans un traitement en cascade. Nous supprimons les accents, remplaçons les caractères spéciaux et convertissons la chaîne en minuscules grâce à la fonction Php strtolower. Après un tiret supplémentaire, nous n'oublions pas d'assembler le tout avec le numéro de l'enregistrement ($retour['liste_num']). Enfin, nous exploitons cette url dynamique dans l'attribut href de la balise Html matérialisant ce lien.

Il est temps de tester les résultats engendrés par ces adaptations.
  • Enregistrer les modifications et basculer sur le navigateur Web,
  • Recharger la page d'accueil en validant sa barre d'adresse,
  • Choisir un département avec la première liste déroulante, par exemple : 26-Drome,
  • Choisir une ville avec la seconde liste déroulante, par exemple : Valence,
  • Puis, cliquer sur le lien de l'enregistrement : Golf des Chanalets par exemple,
Page Web non trouvée, lien réécrit de redirection non correct

Bien que l'Url soit parfaitement construite et conforme, la redirection conduit vers une page d'erreur. Et pour cause, cette adresse désignée par l'url n'existe pas. Cette page n'a jamais été conçue. Mais rassurez-vous, l'essentiel du travail est cependant exécuté.



URL Rewriting en Php
Les adresses que nous avons construites dynamiquement sont des signatures. En d'autres termes, elles proposent toutes la même forme. Elles débutent par le terme idee. Elles se poursuivent par une succession de lettres de l'alphabet, sur un nombre indéfini. Puis, elles se terminent par un numéro suivi de l'extension de la page. Ce sont les expressions régulières qui permettent de déceler des séquences bien précises dans des chaînes de caractères. Nous avions d'ailleurs démontré l'intérêt de ces expressions régulières en VBA Excel, mais aussi avec Javascript.

Nous devons les exploiter dans ce fameux fichier .htaccess. Elles indiqueront au serveur http que toutes les adresses de la forme que nous avons construite, doivent être redirigées vers la page unique fiche.php.
  • A la racine du dossier de décompression, cliquer droit sur le fichier .htaccess,
  • Dans le menu contextuel, choisir de l'ouvrir avec le Notepad,
Deux instructions sont déjà présentes :

RewriteEngine on

ErrorDocument 404 /index.php


La première ligne permet d'activer le module de réécriture d'Url. La dernière indique au serveur comment se comporter en cas d'erreur 404. Une erreur 404 correspond à une page non trouvée. Ici, le serveur doit rediriger la requête vers la page d'accueil index.php. Il est important de comprendre qu'un fichier .htaccess est essentiel pour tout site Web. C'est lui qui déterminera les comportements prédominants du serveur sur des demandes particulières. Et précisément, nous devons rediriger nos url vers la page fiche.php.
  • Entre ces deux instructions, ajouter la ligne suivante :
RewriteRule ^idee-([a-z-]+)[-]([0-9]+).html fiche.php?ID=$2

L'instruction RewriteRule annonce la règle de réécriture que doit suivre le serveur. Le symbole de l'accent circonflexe indique que nous faisons référence à la racine du site, peu importe ce qui précède. Puis, nous décrivons la signature des url à intercepter. Elles commencent par le terme idee suivi d'un tiret. Puis, vient une succession de lettres de l'alphabet et de tirets. Toute lettre de l'alphabet est autorisée, de a jusqu'à z (a-z). Cette règle est mentionnée entre crochets, selon la syntaxe des expressions régulières. Leur nombre est variable et donc indéfini, d'où la présence du symbole + après les crochets. Le tout est inscrit entre parenthèses pour définir explicitement cette séquence. Elle est nécessairement suivie d'un tiret, mentionné entre crochets. Lui-même doit être suivi d'un numéro. Ce nombre est composé de n'importe quel chiffre variant de 0 à 9 (0-9). Et ces chiffres peuvent se répéter un nombre de fois indéfini. Par exemple, il peut s'agir d'une clé primaire de la forme : 499. C'est pourquoi le symbole + emboîte le pas de cette expression, juste après les crochets. Cette seconde séquence est explicitement inscrite entre parenthèses. C'est ainsi que nous pourrons faire la correspondance. Nous terminons l'expression avec le suffixe statique .html. Enfin, nous indiquons que lorsque cette forme d'Url est trouvée, la redirection doit être opérée vers la page fiche.php, avec un paramètre qui fait référence à la seconde séquence définie entre parenthèses (ID=$2). Il s'agit bien sûr du numéro de la clé primaire, encodé dans l'expression régulière.
  • Enregistrer les modifications et basculer sur le navigateur Web,
  • Revenir sur la page d'accueil,
  • Choisir le département de l'Ardèche et la ville d'Aubenas par exemple,
  • Avec la petite barre de navigation, atteindre la page 2 des résultats,
  • Puis, cliquer sur l'idée : Restaurant du château,
Réécriture Url Rewriting en Php grâce aux expressions régulières dans le fichier htaccess sur le serveur

Comme vous le constatez, l'Url est parfaitement construite, unique et surtout fonctionnelle. Elle redirige vers la page fiche.php qui récupère le numéro passé en paramètre. Cette réécriture dont les enjeux sont cruciaux, a été rendue possible grâce à une expression régulière pour définir une règle dans le fichier htaccess.

Chaque enregistrement propose désormais sa propre Url. En conséquence chaque idée de sortie peut être référencée indépendamment, explicitement et qualitativement. Nous pourrions même nous débarrasser de l'extension de l'adresse (.html). Pour cela, nous devons la supprimer dans la construction du code Php et dans celle de l'expression régulière.

Dans une prochaine formation, nous aborderons des notions de sécurité quant à ces réécritures, pour ne pas risquer le Duplicate Content, très mal vu par les robots d'indexation.

 
Sur Facebook
Sur G+
Sur Youtube
Les livres
Contact
Mentions légales



Partager la formation
Partager sur Facebook
Partager sur Google+
Partager sur Twitter
Partager sur LinkedIn