Re-ecriture d URL : Exemple de mise en application
Ce tutorial est destiné à vous montrer par l'exemple la procédure que je suis pour mettre en oeuvre la ré-écriture d'un module. Afin de faire au plus simple, l'exemple sera fait sur le module Encyclopedia.
En écrivant ce tutorial, je pars du principe que vous avez lu et compris le tutorial précédent Re-ecriture d URL : Pour commencer .
C'est parti ou presque car, chose qui n'a pas été faite volontairement de le tutorial suscité, il est nécessaire de comprendre certaines règles de ré-écriture. Surtout en ce qui concerne les choix de remplacement. Avec la ré-écriture d'URL, il est tout à fait possible de remplacer toutes sortes de caractères, qu'ils soient alphabétiques, numériques ou autres. Par exemple, prenons une adresse de page du module Encyclopedia, modules.php?name=@@@Encyclopedia&op=terms&eid=1<r=A. Cette adresse possède, dans les valeurs 1 et A, de l'alphabétique et du numérique. Ces valeurs seront respectivement remplacées par ([0-9]*) et ([a-z]*). Il devrait vous être facile de déduire que ([0-9]*) se chargera de remplacer tous les caractères numériques alors que, ([a-z]*) se chargera lui de remplacer tout ce qui est alphabétique. Il est aussi possible d'utiliser ([a-zA-Z0-9_-]*) qui lui, se chargera aussi bien de l'un que de l'autre. Il pourrai y avoir encore de nombreux exemples dans ce genre mais l'on va rester simple. Quel intérret dans ce cas là de faire une différentiation ? Un gain de temps "machine" qui, sur un très gros site, ne sera pas négligeable. J'avoue que je ne m'enbarrasse pas de ce genre de détails et adopte toujours le plus simple. Il sera toujours temps d'optimiser la ré-écriture lorsque le serveur commencera à tirer la langue . De toute façon, si un jour cela devrait être le cas, cela voudrait dire que le site a énormément de visite, donc est très connu, donc plus trop besoin de la ré-écriture pour favoriser son référencement .
On y va.
Lorsque je m'apprete à appliquer la ré-écriture d'URL à un module, je le parcours dans tous les sens afin de repérer toutes les différentes adresses de pages qu'il contient. Lorsque je dis toutes les différentes adresses, ceci s'entend sans prendre en compte les valeurs comme 1 et A. Pour ce qui concerne la ré-écriture les adresse : modules.php?name=@@@Encyclopedia&op=terms&eid=1<r=A, modules.php?name=@@@Encyclopedia&op=terms&eid=2<r=B,
modules.php?name=@@@Encyclopedia&op=terms&eid=3<r=M, auront exactement la même signification. Seule les "valeurs" sur-lignées changent, l'adresse en elle même étant identique.
Une fois toutes les adresses repérées, nous allons les classer par ordre de grandeur du nombre de valeur. Pour le module Encyclopedia, cela donnera :
modules.php?name=@@@Encyclopedia&op=terms&eid=1<r=A
modules.php?name=@@@Encyclopedia&op=content&tid=$1&query$2
modules.php?name=@@@Encyclopedia&op=content&tid=$1
modules.php?name=@@@Encyclopedia&op=list_content&eid=$1
modules.php?name=@@@Encyclopedia
Notez que les adresses contenant deux valeurs sont en premier. Cela est essentiel pour vous simplifier la tâche. Peut importe l'ordre dans l'adresse en elle même, terms&eid soit avant content&tid, n'a aucune espèce d'importance. L'important étant le nombre de valeurs classé par ordre descendant.
A présent que nous avont les toutes les lignes à ré-écrirent, nous pouvons passer à l'acte.
On édite le fichier htaccess et à la place de # EMPLACEMENT POUR PLACER LES DIVERS CODES DE REECRITURE nous allons placer la première ligne sous cette forme :
| Code: |
| RewriteRule ^encyclopedie_([0-9]*)-lettre_([a-zA-Z0-9]*).html modules.php?name=@@@Encyclopedia&op=terms&eid=$1<r=$2 |
Qu'ai je fait avec cette ligne ? C'est ce que nous allons détailler.
Première partie :
RewriteRule ^ : C'est l'incation qui commande la ré-écriture au serveur. Chaque ligne devra impérativement commencer par ceci.
encyclopedie_ : C'est le nom que j'ai choisi, avec un séparateur, pour ré-écrire le module Encyclopedia. J'aurai très bien pu choisir proutprouttagada, cela n'aurai eu aucun incidence.
([0-9]*) : C'est la commande de ré-écriture pour le 1 de l'adresse à ré-écrire.
-lettre_ : C'est le nom que j'ai choisi, avec ces séparateurs, pour séparer le nom du module des valeurs. J'aurai très bien ne mettre qu'un séparateur out rien du tout. Ce n'est qu'un choix personnel tout comme encyclopedie_.
([a-zA-Z0-9]*) : C'est la commande de ré-écriture pour le A de l'adresse à ré-écrire.
.html : C'est tout bêtement l'extension de ré-écriture choisi. J'aurai très bien pu mettre .htm ou autres. La aussi, c'est un choix personnel.
Deuxième partie :
Elle est bien plus facile à appréhender car en fait, elle correspond à l'adresse initiale sauf que les valeurs ont été remplacées par $1 et $2 dans l'ordre. $1 correspond à ([0-9]*) et $2 à ([a-zA-Z0-9]*). Si la ligne avait contenu plus de valeurs, nous aurions continué dans le même esprit.
Que peut on retirer de tout ceci ? Qu'en fin de compte, on peut faire un ce que l'on veut avec la ré-écriture. Vous noterez que dans la première partie, il n'est nullement fait mention des op, terms, eid et autres. C'est tout l'intérret de la ré-écriture. Se passer du superflu pour ne garder que le plus explicite pour nos amis les robots.
Il est temps de sauvegarder et de tranférer le htaccess sur le serveur pour passer au fichier header.php.
Une fois édité, recherchez la ligne $urlin = array(. Juste en dessous vous avez // EMPLACEMENT POUR PLACER LES DIVERS CODES DE REECRITURE que nous allons remplacer par :
| Code: |
| "'(?<!/)modules.php\?name=@@@Encyclopedia&op=terms&eid=([0-9]*)&ltr=([a-zA-Z0-9]*)'", |
Détaillons la signification de cette ligne :
"'(?<!/) : Commande indispensable à la ré-écriture. L'équivalent de RewriteRule ^ pour PHP-Nuke.
modules.php\?name=@@@Encyclopedia&op=terms&eid= : Tout simplement l'adresse de la page juste avant la première valeur. Notez le & qui est indispensable comme expliqué dans le tutoriel précédent. Oui je sais, ce n'est pas dans le module en lui-même mais cela ne fait rien, il faut tout de même respecter cette règle.
([0-9]*) : C'est exactement la même commande que l'on a placé dans le htaccess por ré-écrire la partie numérique.
&ltr= : La suite de l'adresse de la page et plus précisément le contenu présent entre les deux valeurs ré-écritent. Vous avez vu ? La aussi il y a le &.
'", : Ce n'est que la fermeture de la ligne.
Que peut on retenir de cette ligne ? Pas grand chose en fait si ce n'est que l'on a simplement remplacé les valeurs 1 et A par ([0-9]*) et ([a-zA-Z0-9]*) que l'on a placé précédemment dans le htaccess. Sans oublier bien sur le fameux & qui remplace le & original.
Passons à la dernière étape en recherchant $urlout = array(. Juste en dessous vous avez // EMPLACEMENT POUR PLACER LES DIVERS CODES DE REECRITURE que nous allons remplacer par :
| Code: |
| "encyclopedie_\\1-lettre_\\2.html", |
Détaillons la signification de cette ligne :
encyclopedie_ : C'est exactement le même nom que j'ai choisi pour nommer mon module présent dans le htaccess. Si si c'est vrai, regardez un peu plus haut.
\\1 : C'est ce qui correspond au $1 présent dans le htaccess.
la suite : Je vous laisse un peu cogiter. Nul doute que vous pourrez faire les même rapprochement que je viens de faire.
Voilà, c'est fini pour cette ligne. Ne reste plus qu'à enregistrer le fichier header.pgp et le transférer sur votre serveur. La ligne qui au départ était :
modules.php?name=@@@Encyclopedia&op=terms&eid=1<r=A
devrait ressembler à :
encyclopedie_1-lettre_A.html
Il ne vous reste plus qu'à faire de même pour toutes les autres lignes.
Une petite explication finale tout de même. Pourquoi part on de la plus grande ligne ? Tous simplement du fait que si je commence par la plus petite : modules.php?name=@@@Encyclopedia, je vais me retrouver avec des lignes du genre : encyclopedie.html&op=terms&eid=1<r=A, qui rendra la navigation impossible. Pourquoi cela ? Tout simplement parceque le serveur aura trouvé une correspondance et appliqué la ré-écriture. De ce fait, toutes les adresses des pages contenant des valeurs, se verront attribuer la ré-écriture du module encyclopedie.html, sans que les valeurs ne soient prises en compte .
Dernier conseil au où la ré-écriture ne fonctionnerai pas, cela pour les sites hébergés chez OVH et 1AND1 entre autre? Chez ces hébergeurs et peut être chez d'autres, il faut légèrement modifier la ré-écriture au niveau du fichier htaccess. Il faut rajouter un slash ( / ) au débu de la deuxième partie, par exemple :
RewriteRule ^encyclopedie_([0-9]*)-lettre_([a-zA-Z0-9]*).html /modules.php?name=@@@Encyclopedia&op=terms&eid=$1<r=$2
au lieu de :
RewriteRule ^encyclopedie_([0-9]*)-lettre_([a-zA-Z0-9]*).html modules.php?name=@@@Encyclopedia&op=terms&eid=$1<r=$2 Publié le : 2007-09-13 par stefvar, dernière modification le : 2007-09-13 par stefvar(400 lectures) |