Skip to content

HowTo URLrewriting

Ben edited this page Jan 22, 2017 · 19 revisions

Proposer de jolies adresses pour vos pages

Le principe, les expressions régulières

Il serait trop long d'expliquer le principe ici, je donne quelques liens dans le paragraphe dédié.
De plus, je vous invite à vous documenter sur les expressions régulières, brièvement présentées dans le paragraphe dédié.
C'est cette technique d'expressions régulières qui va être utilisée pour configurer nos jolies urls, il est nécessaire d'avoir un peu de connaissance sur le sujet pour poursuivre ce How To

Toutes les commandes ci-dessous sont à éxécuter dans la VM, connecté via ssh , sauf avis contraire.

Activer le module apache mod_rewrite

Ce module est installé automatiquement lors de l'installation via apt, mais il n'est pas forcément activé par défaut dans toutes les distributions. Pour en être sûr, on l'active :

sudo a2enmod rewrite

Configurer apache pour autoriser les opérations de réécriture

Pour autoriser la réécriture via les fichiers .htaccess, on doit régler les répertoires concernés (ici / et /var/www) dans apache, avec la directive AllowOverride All

On édite le fichier /etc/apache2/apache2.conf vers la ligne 155 (pour la distrib debian 8 à ce jour), pour transformer en :

# Sets the default security model of the Apache2 HTTPD server. It does
# not allow access to the root filesystem outside of /usr/share and /var/www.
# The former is used by web applications packaged in Debian,
# the latter may be used for local directories served by the web server. If
# your system is serving content from a sub-directory in /srv you must allow
# access here, or in any related virtual host.
<Directory />
        Options FollowSymLinks
        AllowOverride All
        Require all denied
</Directory>

<Directory /usr/share>
        AllowOverride None
        Require all granted
</Directory>

<Directory /var/www/>
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
</Directory>

Redémarrer apache

On redémarre le service pour charger toutes nos modifications :

sudo service apache2 restart

On peut maintenant profiter des fonctionnalités, et écrire notre fichier .htaccess

Ecrire notre premier script PHP

On place un script PHP displayheaders.php sur le root de notre premiet vhost, par exemple le vhost simplonsandbox1.local créé dans le How To dédié

Le DocumentRoot étant positionné sur /var/www/simplon1 , on édite le fichier /var/www/simplon1/displayheaders.php :

pico /var/www/simplon1/displayheaders.php

qui contiendra :

<html><body>
  <pre>
    <?php
        print_r($_SERVER) ;
    ?>
  </pre>
</body></html>

NOTE : plus d'infos sur les variables $_SERVER et $_GET ici : Les variables superglobales

Et on vérifie que les valeurs de la variable PHP $_SERVER s'affichent sur la page en pointant le navigateur du système hôte vers l'URL http://simplonsandbox1.local/displayheaders.php

Ecrire un fichier .htaccess

On va placer un fichier .htaccess sur le root de notre premiet vhost, par exemple le vhost simplonsandbox1.local créé dans le How To dédié

Le DocumentRoot étant positionné sur /var/www/simplon1 , on édite le fichier /var/www/simplon1/.htaccess :

pico /var/www/simplon1/.htaccess

Et on y met :

RewriteEngine On
RewriteRule ^display-http-headers$ displayheaders.php [NC,L]

On pointe le navigateur du système hôte vers l'URL http://simplonsandbox1.local/display-http-headers pour vérifier qu'on accède au même contenu que via l'adresse du script directement.

Utiliser les références arrière (back references)

On va démontrer qu'on peut construire de jolies URLs et récupérer d'éventuelles informations contenues dans cette URL, comme notamment un id d'article dans une boutique en ligne.

Admettons donc qu'on aie une boutique en ligne ;
On décide que les articles de notre boutique seront accédés à des urls de la forme : http://nomdedomaine.com/article/<id_de_l_article>/<description_de_l_article>/view.html , pour booster notre référencement naturel et rassurer l'utilisateur avec une adresse concise et facile à comprendre.

Modifions notre .htaccess pour passer les paramètres utiles à notre script PHP : pico /var/www/simplon1/.htaccess pour le transformer en :

RewriteEngine On
RewriteRule ^article/(.*)/(.*)/view.html$ displayheaders.php?articleid=$1&articledesc=$2 [NC,L]

Et modifions notre script PHP pour afficher les paramètres reçus en GET : pico /var/www/simplon1/displayheaders.php , et le transformer en :

<html><body>

<?php
  $collector = '' ;
  foreach($_SERVER as $key => $value) {
    $collector .= '<tr><td>' . $key . '</td><td>' . $value . '</td></tr>' . "\n" ;
  }
?>

<pre><?php print_r($_GET) ; ?></pre>

<table>
  <?php echo $collector ; ?>
</table>

</body></html>

NOTE : plus d'infos sur les variables $_SERVER et $_GET ici : Les variables superglobales

On pointe le navigateur du système hôte vers les URLs suivantes pour afficher les valeurs des paramètres transmis au script en GET :

On note qu'ici, la description qui figure dans l'URL ne sert QUE pour les moteurs de recherche. Seul l'id de l'article sera vraisemblablement utilisé dans le script PHP.