8754 sujets

Développement web côté serveur, CMS

Salut à tous!

Lorsque vous voulez réécrire les URL de votre sitre dynamique afin d'améliorer le référencement de ce dernier, le fichier .htaccess est incontournable.

Le principe consiste à écrire dans le .htaccess, que vous placez à la racine du site, la structure de code que voici:


Options +FollowSymLinks
RewriteEngine on
RewriteRule #votre règle de réécriture d'URL sur une seule ligne


Parmi les URL à réécrire, il y en a qui comportent un ou plusieurs paramètres (récupérables avec $_GET['nom_du_paramètre']).

Soit les trois types d'URL suivants:

www.monsite.com/chemin-depuis-la-racine-du-site/page.php?param1=25
www.monsite.com/chemin-depuis-la-racine-du-site/page.php?param1=25&param2=titre
www.monsite.com/chemin-depuis-la-racine-du-site/page.php?param1=25&param2=titre&param3=edit

qui doivent être réécrites ainsi:

www.monsite.com/chemin-depuis-la-racine-du-site/page25.html
www.monsite.com/chemin-depuis-la-racine-du-site/page25-titre.html
www.monsite.com/chemin-depuis-la-racine-du-site/page25-titre-edit.html

Trois règles de réécriture doivent être, par conséquent, fournies au fichier .htaccess, que voici:


RewriteRule ^page([0-9]+)\.html$ /chemin-depuis-la-racine-du-site/page.php?param1=$1 [L]
RewriteRule ^page([0-9]+)-([a-z]+)\.html$ /chemin-depuis-la-racine-du-site/page.php?param1=$1&param2=$2 [L]
RewriteRule ^page([0-9]+)-([a-z]+)-([a-z]+)\.html$ /chemin-depuis-la-racine-du-site/page.php?param1=$1&param2=$2&param3=$3 [L]


Une question qu'on peut se demander: l'ordre d'apparition des règles de réécriture importe-t-il?

Eh bien, oui.

Je vous conseille vivement de commencer par déclarer les règles de réécriture les plus complexes et de réserver les plus simples pour la fin (en gros, dans notre exemple, inversez l'ordre du code ci-dessus). En effet, si vous n'appliquez pas cette règle, vous risquez d'avoir des surprises à l'affichage de la page www.monsite.com/chemin-depuis-la-racine-du-site/page25-titre-edit.html par rapport à la page www.monsite.com/chemin-depuis-la-racine-du-site/page.php?param1=25&param2=titre&param3=edit .

Autrement dit, si


RewriteRule ^page([0-9]+)-([a-z]+)-([a-z]+)\.html$ /chemin-depuis-la-racine-du-site/page.php?param1=$1&param2=$2&param3=$3 [L]
RewriteRule ^page([0-9]+)-([a-z]+)\.html$ /chemin-depuis-la-racine-du-site/page.php?param1=$1&param2=$2 [L]
RewriteRule ^page([0-9]+)\.html$ /chemin-depuis-la-racine-du-site/page.php?param1=$1 [L]


alors www.monsite.com/chemin-depuis-la-racine-du-site/page25-titre-edit.html = www.monsite.com/chemin-depuis-la-racine-du-site/page.php?param1=25&param2=titre&param3=edit