A quoi sert l’url Rewriting ?

L’URL Rewriting est une méthode de réécriture des URLs devenue indispensable pour la simplification des URLs notamment lors du référencement des pages dynamiques. L’url Rewriting est également très utile pour le référencement naturel (SEO).

Installation de l’url Rewriting sur Apache avec mod_rewrite

Le but principal de l’URL Rewriting est d’éviter d’avoir un couplage entre le format des URL et les ressources techniques présentes sur le serveur, avec pour avantage d’améliorer l’indexation des moteurs de recherche et de présenter des URL moins techniques.
Le module mod_rewrite de Apache est habituellement présent à l’installation d’Apache :

ls -l /usr/lib/apache2/modules/ | grep rewrite

Activons le module grâce à la commande a2enmod :

sudo a2enmod rewrite

On va maintenant indiquer au serveur Apache d’utiliser le module en modifiant RewriteEngine :

vim /etc/apache2/apache2.conf

Ajouter ce bout de configuration en fin de fichier et sauvegarder :

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

Redémarrer Apache pour la prise en compte de notre modification de configuration :

service apache2 restart

Configuration url Rewriting sous Apache

Afin de tester le bon fonctionnement du module, nous créons un fichier PHP :

cat > rewrite.php << EOF

EOF

On fait de même avec le fichier .htaccess :

cat > .htaccess <<'EOF'
Options +FollowSymLinks
RewriteEngine on
RewriteRule ^rewrite\.html$ /rewrite.php [L]
EOF

Votre page http://www.domaine.com/rewrite.php est désormais accessible via l’URL http://www.domaine.com/rewrite.html

Activation de la réécriture d’URL.

Définition de la règle de réécriture.

Regex de réécriture.

Chaine recherchée.

Paramètre Last afin d’indiquer que c’est la dernière règle à traiter.


Définition des règles de réécriture d’url

Maintenant, nous allons voir comment réécrire des URLs dynamiques composées de multiples paramètres.

Activation de la réécriture d’url avec Rewritengine On

Essayons de réécrire les URLs suivantes :

http://www.domaine.com/catalogue.php?page=panier&action=valider -> http://www.domaine.com/panier.valider.html
http://www.domaine.com/image.php?album=26&id=15 -> http://www.domaine.com/image/26/15

RewriteEngine on
### 1er exemple - http://www.domaine.com/catalogue.php?page=panier&action=valider
RewriteRule ([a-z]+)\.([a-z]+)\.html$ /catalogue.php?page=$1&action=$2

### 2ème exemple - http://www.domaine.com/image.php?album=26&id=15
RewriteRule ([0-9]+)/([0-9]+)$ /image.php?album=$1&id=$2 [L]

Règles conditionnelles de réécriture d’url

La réécriture conditionnelle des URLs permet de filtrer et protéger l’accès à une partie de votre site ou bannir une personne tentant d’y accéder.
Une règle conditionnelle suivra le format suivant :

RewriteEngine on
RewriteCond CONDITION VARIABLE
RewriteRule REGLE

D’autres exemples d’utilisation :

RewriteEngine on

### Rediriger une IP vers une autre adresse
RewriteCond %{REMOTE_ADDR} ^1.2.3.4$
RewriteRule ^(.*)$ http://www.autre-domaine.com/

## Rediriger les utilisateurs en provenance d'un domaine banni
RewriteCond %(HTTP_REFERER) ^http://(www.)?domaine_banni.com
RewriteRule .* http://www.google.fr/

### Rediriger les utilisateurs de Internet Explorer :)
RewriteCond %{HTTP_USER_AGENT} MSIE
RewriteRule .* http://www.google.fr/chrome [L]

Les règles peuvent être dynamique en utilisant les variables contextuelles suivantes :

Domaine du serveur.

La page (si elle est renseignée) d’où vient votre visiteur

Navigateur et le système d’exploitation, …

Page demandée en requête HTTP/HTTPS.

Adresse IP faisant la requête.