Apache mod rewrite

From air
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

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