-
Notifications
You must be signed in to change notification settings - Fork 5
HowTo URLrewriting
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.
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
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>
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
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
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.
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 :
- http://simplonsandbox1.local/article/12345/tablette-Samsung-S7-neuve/view.html
- http://simplonsandbox1.local/article/chanel-4512-cf32-fr/sac-a-main-chanel-occasion-tres-bon-etat/view.html
- ...
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.