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.

Laisser un commentaire

(obligatoire)
(obligatoire)


Bad Behavior has blocked 10 access attempts in the last 7 days.