Apache mod rewrite

From air
Jump to: navigation, search

Auteur

CHANET Zoran

mod_rewrite

Le module Apache de rewriting d’url se nomme mod_rewrite. Il permet d’indiquer simplement des règles de réécriture, selon l’url demandé par l’utilisateur. Cela se fera dans le fichier .htaccess.
Pour l’activer, il faut ajouter ces quelques lignes dans le fichier /etc/apache2/apache2.conf (si elles n’y sont pas déjà) :

<ifModule mod_rewrite.c>
RewriteEngine On
</ifModule>

Il faut alors redémarrer le serveur Apache :

sudo /etc/init.d/apache2 restart

Diagnostic

  • Si le module rewrite est présent, un fichier mod_rewrite.so doit exister. Cela se vérifie par la commande suivante :
ls -l /usr/lib/apache2/modules/
  • Cette commande permet de recréer les liens entre Apache et le mod_rewrite :
sudo a2enmod rewrite

Fichier .htaccess

  • Le mode rewriting est d’abord activé avec RewriteEngine on.
  • ^ correspond au début d’une expression rationnelle, $ à la fin de celle-ci. Les symboles utilisés sont décrits sur cette page : [1].
  • Les drapeaux de réécriture sont décrits ici : [2].
  • Les différentes directives utilisables sont recensées dans la documentation : [3].
  • %{<NOM_DE_VARIABLE} permet d'accéder aux variables de serveur.

Exemple

Nous allons explorer l'exemple d'une règle de redirection à l'aide des directives RewriteCond et RewriteRule, utilisées comme suit :

RewriteCond <chaîne de test> <expression de comparaison>
RewriteRule <modèle> <substitution> [<Drapeaux>]

.htaccess :

RewriteEngine on
RewriteCond %{REQUEST_URI} ^/$
RewriteRule (.*) /app [R=301,L]
  • On active d’abord le moteur de redirection.
  • Ensuite, on définit une condition d’accès à la règle, %{REQUEST_URI} indiquant la variable serveur correspondant à l'uri auquel on essaie d'accéder, l’uri spécifié étant / (par l'expression rationelle ^/$).
  • Enfin, la règle de réécriture s’applique à tout l’uri (.*), et le remplace par /app. Une redirection est alors performée en indiquant un code de retour 301 (R=301). Cette règle est indiquée comme la dernière à appliquer par le flag L.
  • Si ce fichier .htaccess est utilisé pour un serveur hébergé à l'adresse monsite.fr, tout accès à monsite.fr/ sera redirigé vers monsite.fr/app.

Sources

[1] https://httpd.apache.org/docs/2.2/fr/rewrite/intro.html#regex
[2] https://httpd.apache.org/docs/2.2/fr/rewrite/flags.html
[3] https://httpd.apache.org/docs/2.2/fr/mod/mod_rewrite.html#Solutions
[4] https://httpd.apache.org/docs/2.2/fr/rewrite/intro.html
[5] https://itx-technologies.com/fr/blog/28-installer-et-activer-le-module-mod_rewrite-sur-apache-et-ubuntu