Apache/URL Rewriting
Principe[modifier | modifier le wikicode]
Sur Internet on distingue globalement quatre types de redirection automatique[1] des navigateurs vers d'autres adresses que celles sur lesquelles ils arrivent :
- HTML (
<meta http-equiv="refresh" content="1; URL=http://destination.fr">
). - PHP (
header('Location: http://destination.fr');
). - Javascript[2].
- HTTP, proposant elle-même plusieurs techniques décrites ci-dessous.
Les règles de réécriture appliquées sur tout le serveur Apache se situent dans /etc/apache2/sites-available/default
[3] ou /usr/local/apache/conf/httpd.conf
.
Les fichiers .htaccess peuvent également en contenir[4] pour personnaliser chaque répertoire.
D'une manière générale, Apache permet de rediriger vers une autre page grâce à :
- Dans les systèmes Unix, la ligne
Options +FollowSymLinks
permet au navigateur de suivre les liens symboliques, en naviguant dans le système de fichier. Alias
[5].AliasMatch
(pareil avec du regex).RewriteRule
réécrit l'URL selon des règles pouvant être précisées en regex[6]. Il nécessite d'être installé sous peine d'erreurs 500, via la commande Unixa2enmod rewrite
.Redirect
renvoie simplement ailleurs.RedirectMatch
(pareil avec du regex).
Définir une redirection définitive (Redirect permanent
) ne s'annule pas seulement en changeant le code qui l'a définit, mais dure jusqu'à expiration du cache serveur. Pour forcer sa suppression immédiate, lancer par exemple :
/usr/local/apache/bin/htcacheclean -p/var/cache/edb/dep/usr/local/portage-ovh/www-apache -l500M
/etc/init.d/apache restart
AllowOverride[modifier | modifier le wikicode]
Attention, si vous n'avez pas créé de VirtualHost, un VirtualHost par défaut est utilisé par apache2 qui ignore les fichiers .htaccess
Pour y remédier :
sudo vi /etc/apache2/sites-enabled/000-default
et remplacez AllowOverride none par AllowOverride All (normalement 2 fois), puis relancez apache :
sudo /etc/init.d/apache2 reload
Exemples[modifier | modifier le wikicode]
Dans la syntaxe suivante, le point seul représente le répertoire courant, et le slash seul la racine de l'URL (le domaine).
Pour changer le domaine vers localhost, tout en gardant la même URL :
SetEnv PHP_VER 5 Redirect / http://localhost/
Plus subtile, on peut changer l'ordre des paramètres initiaux dans l'URL de destination[7] :
RewriteEngine on RewriteBase / RewriteRule ^/xtools/ec/*$ /xtools/pcount/index.php
Pour rediriger les requêtes sous certaines condition il existe RewriteCond. Par exemple pour que toutes les pages non trouvées renvoient vers l'accueil au lieu d'afficher une erreur :
RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ index.php
Références[modifier | modifier le wikicode]
- ↑ https://openclassrooms.com/courses/la-redirection-http
- ↑ http://ntt.cc/2008/01/21/5-ways-to-redirect-url-with-javascript.html
- ↑ http://saintcarre.dyndns.org/saintcarre/content/tux/Activer-la-r-criture-dURL-sous-Debian-Squeeze
- ↑ http://craym.eu/tutoriels/referencement/url_rewriting.html
- ↑ http://httpd.apache.org/docs/current/fr/mod/mod_alias.html
- ↑ http://www.illiweb.com/manuel/Apache_1.3_VF/mod/mod_rewrite.html#RewriteRule
- ↑ http://www.fbollon.net/node/110