Faire un rewrite potable avec Apache
Publié le 7 février 2007 par magnus (retour à la page principale du site)
Il faut s’assurer que le mod_rewrite est installé. Debian l’inclut par défaut dans le paquet de bas d’apache.
changer le nom de serveur en FQDN
FQDN
Fully qualified domain name. Le problème: dans un intranet nous avons tendance à accéder les serveurs web par leur nom court (sans le nom de domaine). C’est pas un problème en soit tant que nous refléchissons et que le FQDN n’est pas le commonnamedans le certificat SSL du serveur.
Il vaut mieux définir le nom complet comme le nom correct et utiliser ce dernier dans le certificat SSL et configurer le serveur pour « dire » au browser d’accéder le nom complet.
Dans le fichier de config du serveur ou d’un des virtual hosts
RewriteEngine On
RewriteCond %{HTTP_HOST} ^$
RewriteRule ^(.*)$ http://$1 [R]
peut être remplacé par %{SERVER_NAME} mais il faut que la variable ServerName dans le fihier de configuration de apache soit le FQDN du serveur.
Explications: La première règle « allume » le moteur de ré-écriture. La seconde est la condition: si la variable HTTP_HOST est le nom court sur le serveur (^$). La troisième est la modification de l’URL.
changer vers https certains url
Le problème: certaines pages demandent une authentification (comme phpmyadmin). Nous voulons donc lorsque nous tapons http:///sql être redirigé vers https://>machine>/sql (même si l’URL a une suite après /sql).
Dans le fichier de configuration de la virtual host http
RewriteEngine On
RewriteRule ^/sql(.*) https://%{SERVER_NAME}/sql$1 [R]
Explications: il n’y a pas de condition car on le met dans la virtualhost qui gère http.
rediriger en utilisant le QUERY_STRING
Nous voulons rediriger les utilisateurs qui accèdent avec cet url: http://serveur/index.php?d=xxx vers http://serveur/xxx.html. Nous pourrions penser qu’une simple RewriteRule ferait l’affaire. Malheureusement, cette dernière ne prend pas en compte le « QUERY_STRING » (ici: d=xxx). en effet elle ne fait que l’ajouter à la fin du rewrite.
La méthode choisie est d’utiliser une condition (RewriteCond), qui elle permet d’avoir accès à la « QUERY_STRING ». Nous récupérons la valeur de la variable en question et nous construison le nouvel url dans la règle (RewriteRule suivante) avec %1.
rewriteCond %{query_string} d=(.*)
rewriteRule ^/index.php$ /%1.html? [R=301,L]
R=301 indique la redirection est définitive et le L ordonne au RewriteEngine de ne plus continuer avec cette url.