Mettre en place de l'url rewriting sur un site à l'aide d'apache

Avertissement Cet article est présent sur ce site à but d'archive.
Les informations y étant contenues peuvent y être obsolètes.

Pourquoi ?

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 :

  • Pour des raisons de sécurité : Ne pas laisser apparaître le langage de développement du site. Le visiteur ou le potentiel pirate, peut déjà moins deviner de quelle facon est codée le site internet.
  • Pour des raisons de référencement : Les url dynamiques avec des ? et des & sont généralement moins bien référencées que des pages avec une url normale et en rapport avec le contenu de la page.
  • Pour hierarchiser le contenu du site : Il est possible avec le module URL Rewriting d'utiliser des répertoires virtuels qui ne figurent pas dans l'arborescence physique du site, et d'y associer un contenu.
  • Eventuellement pour gérer des recherches dynamiques sur le site à la manière de www.php.net

Pré-requis

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

Cas Apache 1.x (Windows)

La procédure sous Windows est identique si ce n'est que sur certaines versions , les .so sont remplacés par des .dll

Cas Apache 2.x (Linux)

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

  • RewriteEngine : Pour indiquer à apache qu'il doit utiliser le module
  • RewriteBase : indique le chemin de base du site (habituellement /) : suivant la configuration du serveur, le paramètre n'est pas forcément nécessaire.
  • RewriteRule : Déclare une règle de réécriture. Plusieurs paramètres s'appliquent : La recherche, la destination, et les options.
      RewriteRule ^recherche$ destination [ options ]
      

Parmi les options on distingue les constantes suivantes

  • [QSA] : Query String Append : afin de prendre en compte la Query String, en général des paramètres supplémentaires optionnels .
  • [R] : Pour forcer la redirection vers la destination
  • [NC] : Pour rendre la recherche insensible à la case
  • [T] : Pour préciser le type mime de la destination
  • D'autres que je considère comme plus singuliers.

D'autres variables peuvent être utilisées :

  • RewriteCond : Pour effectuer une réécriture suivant une condition : Ceci peut être utilisé pour afficher une page spécifique par navigateur, rediriger vers une page spécifique suivant le nom de domaine utilisé, etc. et tout ceci de manière transparente à l'utilisateur.
  • D'autres décrites sur la documentation Apache.

Cas d'utilisation

Cas 1 paramètre

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})

Cas 2 paramètres

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 :

  • idcontenu , numérique de 0 à 999
  • action, chaine alphanumérique

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

 
unix/general/mise-en-place-d-url-rewriting-avec-apache.txt · Dernière modification: 2017/07/27 16:08 (édition externe)
 
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki