De plus en plus , les sites internet ne laissent plus apparaître les véritables URL de leurs pages internet, et cela pour plusieurs raisons :
L'url rewriting peut se mettre en place sur un grand nombre de serveurs Web. Cet article ne s'attachera qu'a la mise en place sur un serveur Apache (Linux ou Windows)
Pour executer le mod_rewrite apache , il faut l'activer dans le fichier de configuration d'apache Cas Apache 1.x (Linux)
Dans le cas d'apache sous debian 3.1 : editer le fichier /etc/apache/modules.conf
LoadModule rewrite_module /usr/lib/apache/1.3/mod_rewrite.so
Sur d'autres distributions, il faut en général editer le fichier /etc/apache/httpd.conf , /etc/httpd/httpd.conf, ou encore /var/www/conf/httpd.conf pour le cas d'un OpenBSD. Il suffit en général de décommenter la ligne pour activer le mod_rewrite.so
La procédure sous Windows est identique si ce n'est que sur certaines versions , les .so sont remplacés par des .dll
Dans le cas d'apache 2, c'est différent : il existe deux répertoires dans le répertoire de configuration d'apache (/etc/apache2/) : mods-available et mods-enabled. mods-available, comme son nom l'indique, contient tous les modules activables, et mods-enabled les modules activés, en utilisant des liens symboliques entre les deux repertoires. Exemple de repertoire mods-available
root@linuxbox:/etc/apache2# ls mods-available actions.load dav_fs.load mem_cache.load rewrite.load asis.load dav.load mime_magic.conf speling.load auth_anon.load deflate.load mime_magic.load ssl.conf auth_dbm.load disk_cache.load php5.0.conf ssl.load auth_digest.load expires.load php5.0_filter.conf suexec.load auth_ldap.load ext_filter.load php5.0_filter.load unique_id.load cache.load file_cache.load php5.0.load userdir.conf cern_meta.load headers.load proxy.conf userdir.load cgid.conf imap.load proxy_connect.load usertrack.load cgid.load include.load proxy_ftp.load vhost_alias.load cgi.load info.load proxy_http.load dav_fs.conf ldap.load proxy.load
On note la présence du fichier rewrite.load Exemple de repertoire mods-enabled
root@linuxbox:/etc/apache2# ls mods-enabled/ cgi.load php5.0.load userdir.conf php5.0.conf rewrite.load userdir.load
Un ls -l nous fera remarquer que les fichiers présents dans mods-enabled sont en fait des liens symboliques vers /etc/apache2/mods-available
De ce fait , si le fichier rewrite.load n'existe pas dans /etc/apache2/mods-enabled , il suffit de le créer avec la commande :
ln -s ../mods-available/rewrite.load
Cette procédure est identique quelque soit le module à charger . Activation des .htaccess dans les repertoires des sites
Le mod_rewrite est accessible dans le fichier de configuration global d'apache, mais il peut l'être aussi dans les .htaccess qui sont placés à la racine d'un site internet. Pour cela, il est nécessaire qu'apache interprête ces fichiers.
Pour faire en sorte qu'apache interprète les fichiers .htaccess, il faut lui préciser dans la section relative aux permissions des sites internet en fixant la variable AllowOverride à 'All'
DocumentRoot /var/www/ <Directory /> Options FollowSymLinks AllowOverride All </Directory> <Directory /var/www/> Options Indexes FollowSymLinks MultiViews AllowOverride All Order allow,deny allow from all DirectoryIndex index.htm index.php </Directory>
Une fois ces configurations effectuées , Vous devez redémarrer le serveur apache :
/etc/init.d/apache restart
ou
/etc/init.d/apache2 restart
Utilisation du mod_rewrite
Le mod_rewrite fonctionne à base d'expressions rationnelles (également nommées expressions régulières). il paraît important de connaitre quelques notions de ces techniques.
Pour faire un tour d'horizon , voici les notations de base (suffisantes dans la plupart des cas)
$ : fin de la chaine
(.*) : toute chaine ([a-z]*) : toute chaine composée uniquement de lettres en minuscules.
([0-9]) : tout chiffre compris entre 0 et 9 ([0-9]{1,2}) : nombre composé de 1 à 2 chiffres : nombre entre 0 et 99 ([0-9]*) : un nombre indéfini.
Les règles de réécritures seront utilisées dans le fichier .htaccess présent à la racine du site
Nous utiliserons les variables suivantes dans le .htaccess
RewriteRule ^recherche$ destination [ options ]
Parmi les options on distingue les constantes suivantes
D'autres variables peuvent être utilisées :
Nous avons un script php nommé contenu.php placé à la racine du site, qui prend en parametre 'idcontenu' identifiant numérique de 0 à 999 , et nous souhaitons une url de la forme 'idcontenu'.html Contenu de .htaccess
RewriteEngine On RewriteBase / RewriteRule ^([0-9]{1,3}).html$ contenu.php?idcontenu=$1 [QSA]
$1 représente la première valeur retournée par l'expression régulière , ici ([0-9]{1,3})
Dans le cadre d'un site d'administration contenu dans le répertoire admin du site Nous avons maintenant un nouveau script nommé read.cgi et prenant en compte deux paramètres :
Nous souhaitons obtenir une url de la forme 'action'_'idcontenu'.html
RewriteEngine On RewriteBase /admin RewriteRule ^(.*)_([0-9]{1,3}).html$ read.cgi?action=$1&idcontenu=$2 [QSA]
si on souhaite brider la valeur de 'action' aux trois valeurs : read, edit, new on procède comme ceci :
RewriteEngine On RewriteBase /admin RewriteRule ^(read|edit|new)_([0-9]{1,3}).html$ read.cgi?action=$1&idcontenu=$2 [QSA]
Vous avez maintenant, normalement les bases pour utiliser des règles de réécriture pour votre site internet. n'hesitez pas à me contacter pour des cas particuliers.
Pages relatives