Aller au menu - Aller au contenu

[Plan du site] Vous êtes ici --- > Le Site du Zéro > Les tutoriels > Non-Officiels > Site Web > Divers > L'URL Rewriting > Lecture du tutoriel

L'URL Rewriting

Vous vous apprêtez à lire un tutoriel rédigé par un membre de ce site. Malgré tout le soin que ce membre a pu apporter au tutoriel, nous ne pouvons pas garantir que les informations contenues sur cette page sont exactes à 100%. Merci de garder cela en tête lorsque vous lirez cette page ;o)
Avatar
Auteur : Captain MDS
Note : 18 / 20 (46 votes)
Visualisations : 42 571

Plus d'informations Plus d'informations
Bienvenue dans mon premier tuto sur l'URL Rewriting.

Mais qu'est-ce-que c'est que ce truc ?

C'est une méthode permettant de rediriger votre visiteur. Bon ok, je suis sûr que vous ne m'avez pas compris donc je vais vous donner un exemple.
Quand vous tapez www.monsite.com/news-7-8.html , vous tombez sur www.monsite.com/news.php?id=7&comm=8 .
C'est plus clair comme ça ? :)
Cela sert juste à rediriger, en aucun cas cela ne remplace l'adresse que vous avez dans la barre de liens (pas comme le SdZ, quoi ^^ ). Pour faire ça, ce n'est plus de l'URL Rewriting mais il faut faire un système de mise en cache des pages PHP, c'est un peu compliqué et je ne sais pas faire, donc on va rester à l'URL Rewriting. :p

Et comment peut-on bien faire ça ?

C'est que je vais vous expliquer dans ce tuto ^^ .
Attention, la méthode que je vais vous expliquer n'est pas compatible avec tous les hébergeurs, désolé ! Il existe cependant d'autres méthodes plus compliquées au cas où la mienne ne marcherait pas ; pour les trouver, Google est votre ami !

C'est partiiiiii !
Sommaire du tutoriel :
Icône du chapitre

A quoi ça sert ? Comment ça marche ?

L'utilité



En effet, si je vous le présente de cette manière, je doute que vous compreniez l'utilité de l'URL Rewriting. :)
C'est très simple, les moteurs de recherche ont du mal à indexer les adresses "exotiques", c'est-à-dire les adresses genre news.php?id=8&comm=7. Google, par exemple, ne va pas plus loin que deux variables après le *.php. Donc, si vous avez plein de pages comme ça sur votre site, vous allez avoir du mal à la référencer. C'est là que l'URL Rewriting intervient.

Le fonctionnement



Cela se fait grâce à un .htaccess, que vous placez à la racine de votre site. Il faut utiliser le mod_rewrite d'Apache. Le problème, c'est qu'il n'est pas activé partout, d'où le message en rouge dans l'introduction.

La préparation

Avant de faire quoique ce soit, vérifions que le mod_rewrite est activé.


Si vous avez un serveur dédié, ouvrez le fichier httpd.conf situé dans le répertoire d'Apache et vérifiez que ces deux lignes ne sont pas des commentaires (un # indique un commentaire) :
Code : Apache
1
2
LoadModule rewrite_module modules/mod_rewrite.so
AddModule mod_rewrite.c

Si elles en sont, effacez simplement le # :) .

Sinon, on va vérifier s'il est activé. Pour ce faire, créez un fichier essai.php à la racine de votre site et mettez-y n'importe quoi dedans. Ensuite, créez un fichier .htaccess (htaccess.txt et vous le renommerez une fois sur le serveur, vu que Windows n'aime pas les fichiers commençant par un .) et mettez les lignes suivantes dedans :

Code : Apache
1
2
RewriteEngine on
RewriteRule ^essai\.html$ /essai.php [L]

(Je vous expliquerai ces lignes plus tard.)
Si vous avez déjà un .htaccess à la racine de votre site, rajoutez-y ces lignes, n'en faites pas un autre.


Une fois le .htaccess et le fichier essai.php sur votre serveur, allez à http://www.votresite.com/essai.html.

Maintenant, il y a deux possibilités :


Maintenant, place aux choses sérieuses ! :pirate:

Le code

La théorie



Voilà, on y est enfin ! :)
Donc, pour commencer, je vais vous expliquer le code de tout à l'heure.

Code : Apache
1
2
RewriteEngine on
RewriteRule ^essai\.html$ /essai.php [L]


La première ligne, RewriteEngine on, veut dire qu'on active le mod_rewrite d'Apache. C'est la ligne la plus importante, sans elle, rien ne marche ^^ .

La seconde ligne maintenant.
RewriteRule signifie qu'on va définir une règle de redirection (ici, essai.html devient essai.php).
^essai\.html$ est une expression régulière (REGEX -M@teo en parle dans son cours de PHP, vous devriez lire la partie sur les REGEX, ça vous servira). Ce n'est pas très compliqué à comprendre : l'URL réécrite doit être entre ^ et $. Ensuite, il suffit d'écrire le nom de l'URL réécrite. Enfin, le [L] est un flag qui signifie que cette règle est la dernière à être appliquée pour ce cas, et que le module ne doit plus tenter de réécrire cette chaîne.
Il faut échapper le(s) point(s) avec un \ sinon ça bugue.

Pour finir, le /essai.php est l'URL de la page dont l'url doit être réécrite. Je vous conseille de mettre le chemin absolu de cette page parce que certains hébergeurs la demandent.



Voilà ! Bon ok, pour votre site, ça ne servira pas à grand chose mais bon, je vais maintenant vous donner un code bien plus pratique qui réécrit toutes vos pages en *.php en *.html. Si vous avez bien compris les REGEX, vous devriez pouvoir le trouver tout seuls.

Code : Apache
1
RewriteRule ^([0-9a-zA-Z-]+)\.html$ /$1.php [L]


Pas de panique, je vous explique les changements. ([0-9a-zA-Z-]+) est une REGEX qui signifie n'importe quelle lettre et n'importe quel nombre autant de fois qu'on veut. Elle doit être entre parenthèses. De l'autre coté, le $1 est le nom de votre page *.php (sans extension) qui va être réécrite exactement de la même manière en *.html. Les parenthèses indiquaient que c'était $1 qu'on modifiait.

Bref, avec ce RewriteRule, index.html renvoie sur index.php, liste-news.html renvoie sur liste-news.php, etc.

Et les URL exotiques dans tout ça ?


J'allais justement y venir :) .
C'est la même chose que tout à l'heure, mais avec plus de variable ($1, $2).
Un exemple ? :p

Code : Apache
1
RewriteRule ^news-([0-9]+)-([0-9]+)-([0-9]+)\.html$  /news.php?idnews=$1&comm=$2&id=$3  [L]


Vous êtes toujours là ? :p

J'vous explique, ne vous inquiétez pas ^^ .
Tout d'abord, l'url qu'on veux réécrire est du modèle :
/news.php?idnews=$1&comm=$2&id=$3 ;
$1, $2 et $3 sont les valeurs de idnews, comm et id.
Donc, à la place de l'url qu'on veut réécrire, on met ça. De l'autre coté, on marque tout d'abord la forme d'URL qu'on veut (ici news-$1-$2-$3.html mais vous pouvez faire autrement si ça vous chante :p ) et on remplace $1, $2 et $3 par n'importe quel nombre autant de fois qu'on veut (REGEX).
Évidemment, on peut très bien mettre des lettres au lieu des chiffres : dans ce cas, faites comme tout à l'heure ( ([a-zA-Z0-9-]+) ).

Si vous voulez combiner les deux exemples que je vous ai montrés ou en rajouter d'autres, mettez d'abord le(s) spécifique(s) à une page, et ensuite le général (donc le deuxième en premier).


Exercices



Vous avez tout compris ? Vous en êtes sûrs ? Prouvez-le moi ! ^^
Je vais donc vous donner quelques exercices pour vous entraîner et devenir un champion en URL Rewriting ;) .

Premier exercice :

Écrivez-moi la règle réécrivant tous les liens de votre site de la forme XXXX.php?var1=1&var2=3 en XXXX-1-3.html.
Simple, nan :p ?
Solution :
Secret (cliquez pour afficher)
Code : Apache
1
RewriteRule ^([a-zA-Z0-9-]+)-([0-9]+)-([0-9]+)\.html$ http://www.monsite.com/$1.php?var1=$2&var2=$3


Vous aviez trouvé ? Cela se passe d'explications, si vous ne comprenez pas, relisez la partie Théorie. J'ai seulement fait un mix entre les deux exemples. :)

Deuxième exercice :

Écrivez-moi la règle permettant de réécrire forum.php?page=showtopic&id=1558 en forum/topic-1558.html.
Vous êtes encore en vie ? ^^
Moi je ne vois aucune difficulté, vous en voyez, vous ?

Secret (cliquez pour afficher)
Code : Apache
1
RewriteRule ^forum/topic-([0-9]+)\.html$ http://www.monsite.com/forum.php?page=showtopic&id=$1



Bien plus simple que ça en à l'air, nan ? :)

Les autres utilisations de l'URL Rewriting

Bannir un nom de domaine



Grâce à l'URL Rewriting, on peut aussi bannir les utilisateurs provenant d'un nom de domaine spécifique et ensuite les rediriger sur un autre site.
Exemple :
Code : Apache
1
2
3
RewriteEngine on
RewriteCond %(HTTP_REFERER) ^http://(www.)?ledomaineabannir.com
RewriteRule .* <lien url="http://www.osef.tk">http://www.osef.tk</lien> [L]


Si votre domaine est celui indiqué, vous êtes redirigés sur le site indiqué dans la RewriteRule.

Empêcher de se faire piquer les images de son site



Ce petit script que je vais vous présenter est très utile : il empêche les autres sites de piquer vos images et de vous voler de la bande passante. Il est assez simple à comprendre.

Code : Apache
1
2
3
4
RewriteEngine On
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://www.votresite.com/.*$ [NC]
RewriteRule .*\.(gif|png|jpe?g)$ - [F]


On compare le nom de domaine où l'on voit l'image et le vôtre. Si c'est le même, on affiche l'image, sinon on affiche une erreur 403 (interdiction d'accéder à cette page). Le flag [NC] veut dire que cette ligne n'est pas sensible à la casse (IMAGE.jpg, image.jpg, ImAgE.JpG, etc. marchent tous). Le flag [F] renvoie une erreur 403 si les conditions sont bonnes (nom de domaine où l'on voit l'image différent du vôtre).

Bannir les utilisateurs d'un navigateur



Ou encore, un truc encore plus fun, on peut bannir les utilisateurs d'un certain navigateur et les rediriger sur un autre site. Un petit exemple qui me fait bien marrer :diable: :
Code : Apache
1
2
3
RewriteEngine on
RewriteCond %{HTTP_USER_AGENT} MSIE
RewriteRule .* <lien url="http://www.mozilla.org">http://www.mozilla.org</lien> [L]


MSIE = Internet Explorer ^^ .
Méchant, nan ?

Voilà, nous en avons fini pour ce tuto.
Je remercie ce site qui m'a fourni les informations nécessaires à l'écriture de ce tuto.
J'espère que vous avez bien tout compris. Si vous avez besoin d'éclaircissements, envoyez-moi un MP.
Retour en haut Retour en haut


Créé : le 12/04/2006 à 16:09:25
Modifié : le 22/08/2008 à 16:08:42
Avancement : 100%
Licence : Creative Commons BY-NC

Changer de design | En savoir plus | Plan du site | Politique d'accessibilité | Règles | RSS tutoriels | RSS news
Édité par Simple IT SARL : Nous contacter | Notre blog | Revue de presse | Publicité

Y'a plus rien à lire, faut remonter maintenant !

Hébergement web - Correction de tutoriels - Créer un site
Vous souhaitez apparaître ici ? Contactez-nous.

Nombre de connectés 354 Zéros connectés | Requêtes SQL 9 requêtes | Temps de génération de la page : Total (SQL) 0.0415s (0.0281s)