ESTHÉTIQUE
SIMPLICITÉ
EFFICACITÉ

Aneartiste sur deviantartAneartiste sur twitter Aneartiste sur scoop-it

Principes de la réécriture d'URL(s)

L'art secret d'être ailleurs

L'idée vous est peut-être venue un jour de réorganiser autrement la distribution des pages web de votre site. La réécriture de lien (ou URL Rewriting) permet de faire cela sans modifier quoi que ce soit à l'architecture physique des pages sur le serveur. Vous pouvez faire disparaitre des répertoires ou utiliser une variable id passée dans l'url pour en faire (virtuellement) un dossier où classer vos pages. Le but de l'opération est, d'une part, d'enlever quantité de données en variable dans la barre d'adresse, accompagnées de leur cortège de "&" et de "=" :?id1=n1&id2=n2&… et d'au­tre part, de présenter au visiteur un aperçu compréhensible de l'architecture conceptuelle sous laquelle s'ordonnent les différentes pages. La situation apparente des pages du site, relativement à leurs liens dans l'URL, ne correspondra donc pas, la plupart du temps, à leurs emplacements réels sur le serveur.

Linux Default Desktop Wallpaper,Linux OS WallpaperLinux OS Wallpaper

« Il est préférable d'être ailleurs lorsqu'autre part n'est plus ici. »
—Pierre Dac

Avant tout, la première chose à faire sera de vérifier le fonctionnement effectif de l'url rewriting chez son hébergeur. Pour l'utilisation des flags et les redirections, on pourra se reporter à la page dédiée du site de Maigret Aurélien qui en résume l'essentiel avec beaucoup de clarté. Le but de l'URL rewriting est d'intercepter, avant envoi, l'adresse modifiée de la page demandée (n'ayant pas d'équivalent physique sur le serveur) avant de renvoyer côté client la page appropriée grâce à une table de correspondance. Celle-ci est enregistrée chez l'hébergeur, dans le fichier caché nommé .htaccess, à la racine du site. Les règles du module Rewrite utilisent les expressions régulières compatibles "Perl" et se présente sous la forme :


RewriteEngine on
Options +FollowSymLinks
RewriteRule ^http://site.com/(.*).htm$ http://site.com/page.php?id=$1

Suivant l'exemple ci-dessus, une page appelée avec l'adresse "http:­//­site.­com­/web­de­sign­.htm" renverra la page stockée sur le serveur distant avec l'adresse "http://­site.com/­page­.php?­id=­web­de­sign". Dans ce qui est présenté ici, on remarque dans la première expression le fragment de chaîne entre parenthèse (.*). Il s'agit d'une expression utilisant le métacaractère "*". Un métacaractère (en anglais, wildcard ou joker) est un caractère informatique utilisé lors de la recherche d'un mot ou d'une expression incomplète. Le point indique le début du mot, et le signe étoile remplace n'importe quel mot. Il est équivalent au métacaractère RegExp \W en JavaScript. Les métacaractères ont des avantages et des inconvénients. En effet, ils permettent de regrouper sous une règle identique des demandes variées. Dans le cas présent, l'expression utilisée permet de traiter des identifiants multiples de la même manière et économise donc des lignes de code dans le fichier .htaccess. Mais dans certains cas, l'utilisation des métacaractères peut amener des règles de réécriture à se superposer, quand bien même leurs rédactions seraient légèrement différentes. En conséquence, c'est la première règle rencontrée qui sera appliquée, et les suivantes seront ignorées. Il convient alors de les utiliser avec circonspection. Pour éviter ce désagrément, lorsque plusieurs règles gèrent des chaînes similaires, il faudra toujours aller de la règle la plus précise à la plus générale.

À l'intérieur de chaque instruction, les parties entre parenthèses représentent des variables et, en tant que telles, correspondent suivant une progression numérique chronologique aux expressions situées dans la seconde moitié de l'instruction : $1, $2, $3, etc. Dans la pratique, l'URL Rewriting consiste à collecter par ordre d'apparition dans la première partie de l'instruction (lien fictif) les variables entre parenthèses, pour les redistribuer en fonction de leur numérotation dans la seconde partie (lien réel).
Par exemple :


RewriteRule ^http://objective-moon/apollo/(17)/(mission)/(1975).html$
pourrait renvoyer vers
« http://objective-moon/apollo/mission/page.php?year=1975&id=17 »
avec un lien rédigé dans ce cadre de la façon suivante :
objective-moon/apollo/$2/page.php?year=$3&id=$1

En tant que variable (1975) donnera le même résultat que ([0-9]+) ou (.*), mais n'aura pas la même fonction. (1975) ne cible que les occurrences de la chaîne numérique transmise ; ([0-9-]+) cible n'importe quel nombre entier ; (.*) cible n'importe quelle chaîne de caractères. Pour obtenir plus d'informations concernant les variables et les métacaractères, on peut se référer à la page "Les expressions rationnelles en Perl sur le site de Perl.Mines-Albi. On y trouvera la signification d'autres métacaractères utilisés, notamment dans la première partie du chapitre "Expressions rationnelles". (voir ainsi la signification des signes suivants : \ ^ . $ | () []).

Mission Apollo 17,Image NASA PixabayImage NASA Pixabay

« Il y a des gens qui peuvent être ailleurs quand ils veulent, ils n'ont pas besoin d'avoir un passeport. »
—Jacques Prévert


Usage des métacaractères en URL-Rewriting

Comme vu précédemment [0-9]+ permet de cibler n'importe quel nombre entier (le signe + permet la répétition de n'importe quel chiffre entre 0 et 9). De manière identique [a-z]+ permet de cibler n'importe quel mot en minuscule, et [a-z-]+ permet de cibler n'importe quel groupe de mots en minuscule en y intégrant le tiret. Si l'on désire reconnaître des majuscules, on écrira [A-Z]+. et pour finir si l'on veut grouper tous les choix précédents, on peut concaténer les trois termes en une seule expression [a-zA-Z0-9-]+, ce qui équivaut pratiquement à (.*). Si on utilise un métacaractère comme simple caractère dans une règle de réécriture, il faudra l'échapper avec un anti-slash (\) pour qu'il reprenne sa valeur. Par exemple, ([a-b]+)\+([a-b]+) renverra "hello+world" alors que ([a-b]+)+([a-b]+) renverra "helloworld".

Le formulaire suivant permet de tester la réécriture d'URL en proposant pour un lien PHP saisit trois résultats successifs et la requête correspondante.



Si vous désirez télécharger le programme pour l'exécuter en local sur votre PC, vous pouvez l'obtenir ici (licence CC-by 4.0 : partager, copier, reproduire, distribuer, communiquer, réutiliser, adapter). Le fichier .html compressé ne pèse que 1,5 ko et n'utilise pas de bibliothèque jQuery.

publié le 12/01/2022, à 08h20 par Frédéric Schäfer

Précédentsuivant