Redirections et autres règles utiles pour le fichier .htaccess

Le fichier .htaccess permet de modifier simplement certaines configurations du serveur Apache même sur un hébergement mutualisé (il y a quand même des limitations selon l'hébergeur).

On peut par exemple effectuer des redirections (plus efficaces qu'en PHP) ou protéger l'accès à certains dossiers.

Exemple de redirections via le fichier .htaccess

Lors d'une refonte de site internet, il est courant que les URLs du nouveau site soient différentes alors que le contenu peut être quasiment identique. Pour ne pas perdre tout le référencement acquis sur l'ancien site, il est donc recommandé d'appliquer des redirections des anciennes URLs vers les nouvelles afin d'indiquer aux moteurs de recherche où se trouve la nouvelle page et qu'ils puissent mettre à jour leurs index sans infliger de pénalité.

# Redirection d'une ancienne url vers une nouvelle url
Redirect 301 /anicenne-url /nouvelle_url

# Redirection d'un domaine vers un autre
Redirect 301 / http://www.nouveau-domaine.com/

# Rediriger tout un dossier vers autre dossier ou autre URL
Redirect 301 /dossier1/ /dossier2/
Redirect 301 /dossier1/ http://nouveau-domaine.fr/dossier2/

Dans l'exemple ci-dessus, le code 301 indique une redirection permanente. Pour effectuer une redirection temporaire, utilisez le code 302.

Pendant une refonte de site, il est parfois inévitable d'avoir une coupure du site internet le temps que l'on désactive l'ancien site et que l'on mette en place le nouveau site. Il est alors indispensable de mettre en place une redirection temporaire vers une page de maintenance le temps que l'on installe d'effectuer les opérations de mise en ligne.

# Redirection temporaire (maintenance)
RewriteEngine on
RewriteCond %{REQUEST_URI} !/maintenance.html$
RewriteRule $ /maintenance.html [R=302,L]

Ici, ce sont les instructions RewriteCond et RewriteRule qui sont utilisées. Elles nécessitent que le module Apache mod_rewrite soit activé sur le serveur.

Une autre utilité des redirections .htaccess est de pouvoir forcer l'utilisation d'un seul domaine (afin d'éviter le pénalisant Duplicate Content) ou de forcer l'accès avec HTTPS pour plus de sécurité pour le visiteur.

# Forcer un seul domaine (redirige les autres vers celui-ci)
RewriteEngine On
RewriteCond %{HTTP_HOST} !^www.mondomaine.fr [NC]
RewriteRule (.*) http://www.mondomaine.fr/$1 [QSA,R=301,L]

# Forcer HTTPS
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}

Protection de répertoire via le fichier .htaccess

On peut protéger un répertoire de 2 manières différentes : soit par restrictions d'IP, soit par demande d'authentification. Chacune à ses avantages et ses inconvénients et, les plus paranos, peuvent coupler les 2.

Protection de répertoire par restrictions d'IP

C'est la façon la plus simple et la plus rapide de restreindre l'accès à un répertoire mais ça peut devenir contraignant lorsque l'on veut voir le site depuis un endroit d'où l'on ne connait pas l'IP (salle de réunion extérieure par exemple) ou lorsqu'il y a beaucoup d'utilisateur (et donc beaucoup d'IP à renseigner).

# restrictions d'accès par IP
Order deny,allow
Deny from all
Allow from 127.0.0.1
Allow from 127.0.0.2

Protection de répertoire avec authentification

Plus complexe à mettre en œuvre, cette solution est aussi plus contraignante pour l'utilisateur qui doit entrer ces identifiants pour accéder au site. En revanche, le site est accessible depuis n'importe où et vous pouvez gérer plus finement les utilisateurs ayant accès.

En plus du fichier .htacces, il faudra créer le fichier .htpasswd (ou tout autre nom) qui contiendra les identifiants et les mots de passe.

# Contenu de .htpasswd
nom-utilisateur1:$1$hdkZ3x0v$iADjlj7l3V6T8dDuv3UhB/
nom-utilisateur2:$1$rRAJj8b6$bAa4BugX0ehWRHdo0Cbks/

Les mots de passe sont cryptés dans le .htpasswd. Il existe de nombreux générateurs de .htpasswd en ligne.

Ensuite, dans le fichier .htaccess, il faut placer le code suivant qui bloquera l'accès aux utilisateurs non-authentifiés.

# Contenu de .htaccess
AuthName "Veuillez vous identifier"
AuthType Basic
AuthUserFile "/real/path/to/.htpasswd"
Require valid-user

Il faut mettre le chemin complet vers le fichier contenant les mots de passe à la ligne AuthUserFile.