Title: Mod_Rewrite Le couteausuisse
1Mod_RewriteLe  couteau-suisseÂ
- La réécriture dURLs
- au service du
- référencement.
2Attention aux pièges !
- Il y aura obligation de modifier les sources de
vos pages web, pour générer en interne le nouveau
format dURLs.- suppose certaines compétences
en programmation - Il faut donc bien réfléchir avant de se lancer
dans laventure et planifier le travail Ã
effectuer !
3Réfléchissons ensemble
- Quel serait le gain espéré ?- Peut-on espérer
un meilleur positionnement du site ?- Peut-on
espérer avoir plus de pages indexées ?- Mon
PageRank peut-il augmenter ? - Quel est le format actuel des URLs ?- combien
de variables a-t-on dans lURL ?- ce nombre
peut-il varier ? (quantité, ordonnancement)- la
génération des URLs est-elle centralisée dans le
code ?
4Quelques cas dutilisation
- Voyons ensemble quelques cas dutilisation de
mod_rewrite qui permettront une meilleure
compréhension du mécanisme de la réécriture
dURLs. -
5Quelques cas dutilisation
- Voyons ensemble quelques cas dutilisation de
mod_rewrite qui permettront une meilleure
compréhension du mécanisme de la réécriture
dURLs. - Posons notre première ligne
RewriteEngine On
6Un nom  canoniqueÂ
- Vous souhaitez que vos pages soient toujours
accédées sous - http//www.example.com/
- plutôt que
- http//example.com/
7Un nom  canoniqueÂ
RewriteEngine On RewriteCond HTTP_HOST
!www\.example\.com NC RewriteCond HTTP_HOST
! RewriteRule /(.) http//www.example.com/1
L,R
8Un nom  canoniqueÂ
RewriteEngine On RewriteCond HTTP_HOST
!www\.example\.com NC RewriteCond HTTP_HOST
! RewriteRule /(.) http//www.example.com/1
L,R
- Explication des règles
- Si le nom du HOST nest pas www.example.com
- Et si le nom du HOST nest pas  vide ou
 indéfini (le AND est implicite entre les
conditions ) - on réécrit lURL vers www.example.com
9En présence de sous-domaines
RewriteEngine On RewriteCond HTTP_HOST
example\.com NC RewriteRule /(.)
http//www.example.com/1 L,R301
10En présence de sous-domaines
RewriteEngine On RewriteCond HTTP_HOST
example\.com NC RewriteRule /(.)
http//www.example.com/1 L,R301
- Dans ce cas, on vérifie simplement si le domaine
demandé est example.com et nous navons de ce
fait plus de raison de tester un nom de domaine
 vide . - Notez la disparition du signe  ! qui avait
pour effet dinverser le test. - Si le domaine est example.com
- Alors
- On réécrit lURL vers www.example.com/ avec une
entête 301
11Ce que lon retiendra pour linstant
- Les notations 1,29 sont des
 références-arrières qui correspondent aux
expressions mises entre parenthèses en premier
argument de la règle.
12Ce que lon retiendra pour linstant
- Les notations 1,29 sont des
 références-arrières qui correspondent aux
expressions mises entre parenthèses en premier
argument de la règle. - Les drapeaux en fin de règle qui permettent
daffiner le comportement de celle-ci (R
301,NC,L,QSA)
13Ce que lon retiendra pour linstant
- Les notations 1,29 sont des
 références-arrières qui correspondent aux
expressions mises entre parenthèses en premier
argument de la règle. - Les drapeaux en fin de règle qui permettent
daffiner le comportement de celle-ci (R
301,NC,L,QSA) - Les variables serveur les plus courantes que lon
peux tester en cas de réécriture conditionnelle
(HTTP_HOST, HTTP_USER_AGENT, HTTP_REFERER,
REMOTE_ADDR, SCRIPT_FILENAME, QUERY_STRING )
14Ce que lon retiendra pour linstant
- Les notations 1,29 sont des
 références-arrières qui correspondent aux
expressions mises entre parenthèses en premier
argument de la règle. - Les drapeaux en fin de règle qui permettent
daffiner le comportement de celle-ci (R
301,NC,L,QSA) - Les variables serveur les plus courantes que lon
peux tester en cas de réécriture conditionnelle
(HTTP_HOST, HTTP_USER_AGENT, HTTP_REFERER,
REMOTE_ADDR, SCRIPT_FILENAME, QUERY_STRING ) - Les caractères et qui permettent de définir
les limites de lexpression
15Un exercice pas très compliqué !
- Énonçons ces conventions
- Un point décimal  . signifie nimporte quel
caractère - Un signe   signifie zéro ou plusieurs
instances de ce qui précède comme le signe
  signifie au moins une instance. - Un signe  ? marque lélément qui le précède
comme facultatif - Un signe   signifie OU (logical OR)
- Les parenthèses permettent de grouper les
éléments
16Un exercice pas très compliqué !
- Énonçons ces conventions
- Un point décimal  . signifie nimporte quel
caractère - Un signe   signifie zéro ou plusieurs
instances de ce qui précède comme le signe
  signifie au moins une instance. - Un signe  ? marque lélément qui le précède
comme facultatif - Un signe   signifie OU (logical OR)
- Les parenthèses permettent de grouper les
éléments
- Que peut donc signifier cette simple règle ?
RewriteRule .\.(gifjpe?gpngcssjs) - L
17La réponse est
RewriteRule .\.(gifjpe?gpngcssjs) - L
- Une chaîne aléatoire comprenant au moins un
caractère . - Suivie dun point décimal \.
- Suivie dun groupe de lettres comprenant gif,
jpg, jpeg, png, rss ou js - Ne sera pas réécrite - (ça cétait nouveau !)
- Ensuite on quitte le mécanisme pour cette
expression L
18La réponse est
RewriteRule .\.(gifjpe?gpngcssjs) - L
- Une chaîne aléatoire comprenant au moins un
caractère . - Suivie dun point décimal \.
- Suivie dun groupe de lettres comprenant gif,
jpg, jpeg, png, rss ou js - Ne sera pas réécrite - (ça cétait nouveau !)
- Ensuite on quitte le mécanisme pour cette
expression L
En résumé cette règle évite la réécriture pour
les fichiers images, Javascript et css ! Pourquoi
donc ?
19Une règle qui ne fait rien ?
- Nous avons vu dans lexemple précédent une règle
 inutile qui ne fait rien. - Pourquoi dire à mod_rewrite de  ne rien faire ?
- Tout simplement pour éviter de passer à travers
un  chapelet de règles pour les fichiers qui
ne doivent pas être réécrits. - Cela permet déconomiser les ressources du
serveur si on met cette règle au début du fichier
.htaccess - Il faut toujours garder ces  économies Ã
lesprit !
20Jour ou nuit ?
- Si vous souhaitez présenter des pages différentes
selon lheure de la visite, cest très simple Ã
mettre en place
RewriteEngine on RewriteCond TIME_HOURTIME_M
IN gt0800 RewriteCond TIME_HOURTIME_MIN
lt2000 RewriteRule index\.html index.jour.html
L RewriteRule index\.html index.nuit.html L
Attention les conditions sont enchaînées avec un
 OU logique et ne sappliquent quà la
première règle qui les suit.
21Pour plus de clarté
RewriteEngine on RewriteCond TIME_HOURTIME_
MIN gt0800 RewriteCond TIME_HOURTIME_MIN
lt2000 RewriteRule index\.html index.jour.html
L RewriteRule index\.html index.nuit.html L
Ceci ne présente aucune différence avec la règle
de la page précédente, mais les lignes vides
permettent de mieux visualiser la logique des
réécritures. Prenez tout de suite de bonnes
habitudes !
22Contrer les  voleurs dImages ?
- Votre site est riche dimages et vous ne voulez
plus que les squatteurs du Web sen emparent et
les affichent sur leurs sites.
RewriteCond HTTP_REFERER ! RewriteCond
HTTP_REFERER !http//www.example.com/. NC
RewriteRule .\.(gifjpe?gpng) - F
23Contrer les  voleurs dImages ?
- Votre site est riche dimages et vous ne voulez
plus que les squatteurs du Web sen emparent et
les affichent sur leurs sites.
RewriteCond HTTP_REFERER ! RewriteCond
HTTP_REFERER !http//www.example.com/. NC
RewriteRule .\.(gifjpe?gpng) - F
Si le référant est défini et sil est différent
de http//www.example.com/ on réécrit toutes les
images en présentant une entête 403 F.
24Bloquer les robots indélicats ?
- Certains robots sont vraiment envahissants et peu
respectueux du fichier robots.txt, autant leur
interdire laccès au site.
RewriteCond HTTP_USER_AGENT Gigabot
NC,ORRewriteCond HTTP_USER_AGENT Xenu\
Link\ Sleuth NC,ORRewriteCond
HTTP_USER_AGENT HTTrack NC,ORRewriteCond
HTTP_USER_AGENT PhpDig NC,ORRewriteCond
HTTP_USER_AGENT WebCopier NC,ORRewriteRule
. - F
25Redirection interne ou externe ?
- Il y a une différence importante entre
RewriteRule ancien\.html nouveau.html
et
RewriteRule ancien\.html nouveau.html R
Elle ne se verra quau niveau de ladresse
apparaissant dans la barre du navigateur.La
première expression affichera ancien.html, alors
que la seconde affichera nouveau.html grâce à la
redirection externe due au drapeau R. A vous de
définir ladresse qui sera affichée par le
navigateur !
26Lutilisation de RewriteMap
On peut facilement interdire laccès à une liste
de hosts ou dIPs
RewriteMap hosts-deny txt/chemin/vers/fichier/h
osts.deny RewriteCond hosts-denyREMOTE_HOST
NOT-FOUND !NOT-FOUND OR RewriteCond
hosts-denyREMOTE_ADDRNOT-FOUND
!NOT-FOUND RewriteRule /. - F
Avec le fichier hosts.deny suivant
193.102.180.41 -bsdti1.sdm.de -
192.176.162.40 -66.249.65.207 -
27Lutilisation de RewriteMap
On peut facilement interdire laccès à une liste
de hosts ou dIPs
RewriteMap hosts-deny txt/chemin/vers/fichier/h
osts.deny RewriteCond hosts-denyREMOTE_HOST
NOT-FOUND !NOT-FOUND OR RewriteCond
hosts-denyREMOTE_ADDRNOT-FOUND
!NOT-FOUND RewriteRule /. - F
Avec le fichier hosts.deny suivant
Attention Le fichier hosts.deny nest pas une
liste, mais une  map . Il faut donc
impérativement quil contienne un second
argument, même si comme ici il na pas de
signification particulière ! Mod_rewrite
lanalysera en recherchant des couples clé-valeur.
193.102.180.41 -bsdti1.sdm.de -
192.176.162.40 -66.249.65.207 -
28Lutilisation de RewriteMap
On peut facilement interdire laccès à une liste
de hosts ou dIPs
RewriteMap hosts-deny txt/chemin/vers/fichier/h
osts.deny RewriteCond hosts-denyREMOTE_HOST
NOT-FOUND !NOT-FOUND OR RewriteCond
hosts-denyREMOTE_ADDRNOT-FOUND
!NOT-FOUND RewriteRule /. - F
Avec le fichier hosts.deny suivant
Attention Le fichier hosts.deny nest pas une
liste, mais une  map . Il faut donc
impérativement quil contienne un second
argument, même si comme ici il na pas de
signification particulière ! Mod_rewrite
lanalysera en recherchant des couples clé-valeur.
193.102.180.41 -bsdti1.sdm.de -
192.176.162.40 -66.249.65.207 -
Faites très attention aux adresse que vous
renseignez !
29Limpact sur le référencement
Une URL réécrite peut contenir des mots clés
utiles au référencement http//www.lisons.info/H
ayes-Billy-auteur-46.php Pour retrouver
facilement la fiche de lauteur de  Midnight
Express , portant le numéro 46, de même que
celles de tous les auteurs de la base, il suffit
dune règle de réécriture simple
RewriteRule auteur-(0-9)\.php
auteur.php?id1 QSA,L
30Limpact sur le référencement
Une URL réécrite peut contenir des mots clés
utiles au référencement http//www.lisons.info/H
ayes-Billy-auteur-46.php Pour retrouver
facilement la fiche de lauteur de  Midnight
Express , portant le numéro 46, de même que
celles de tous les auteurs de la base, il suffit
dune règle de réécriture simple
RewriteRule auteur-(0-9)\.php
auteur.php?id1 QSA,L
Le résultat ne se fait pas attendre bien
longtemps .
31Cest magique, non ?
32Cest fini pour aujourdhui !
Vous en avez tous suffisamment découvert
aujourdhui pour vous lancer avec prudence dans
la réécriture dURLs. La documentation sur ce
sujet est abondante, mais peu darticles existent
en langue française. Quelques articles sont
accessibles sur Webmaster-Hub, notamment
 Mod_rewrite, ou la réécriture dURLs à la
volée , ou encore  La réécriture dURLs
récursive que nous aborderont très certainement
une prochaine fois Ils vous permettront de
plonger plus avant dans ce sujet passionnant
! Merci à tous !