Faire des redirections avec votre fichier htaccess

Avec la directive RedirectPermanent

La directive RedirectPermanent envoie un code de redirection permanente (301), indiquant que la ressource a été définitivement déplacée.

Rediriger de manière définitive une page vers une autre

Dans l’exemple ci-dessous, l’utilisateur cherchant à accéder à la page /test/actu.html sera redirigé vers la page /actualites/  :

RedirectPermanent /test/actu.html  /actualites/

Rediriger de manière définitive un répertoire vers un autre

Dans l’exemple ci-dessous, l’utilisateur cherchant à accéder au répertoire /articles (et toutes ses pages) sera redirigé vers le repertoire /actualites/articles/ :

RedirectPermanent /articles   http://www.monsite.fr/actualites/articles

Rediriger de manière définitive un répertoire vers un nom de domaine

Rediriger de manière définitive le répertoire /archives vers le site http://www.mesarchives.net/ :

RedirectPermanent /archives   http://www.mesarchives.net/

Avec la directive ErrorDocument

Rediriger vers une page 404 quand la page n’est pas trouvée

Pour définir une page d’erreur 404 personnalisée :

ErrorDocument 404   /erreur-404.php

Attention de ne pas mettre une complète, sinon le code retourné par la page sera 302 au lieu de 404. Les moteurs de recherche ne pourront donc pas savoir que la page n’existe pas (ou plus) et ne mettront donc pas à jour leur indexes en conséquence.

Ainsi, le code suivant fonctionne, mais n’est pas recommandé :

ErrorDocument 404 http://www.monsite.fr/erreur-404.php

Avec la directive RewriteRule

Rediriger toutes les pages d’un répertoire vers un autre répertoire

Rediriger de manière définitive le répertoire /articles (et toutes ses pages) vers le répertoire /actualites/articles/ :

RewriteRule /articles  /actualites/articles [R=301]

Rediriger toutes les pages d’un repertoire vers une page de maintenance

Rediriger de manière temporaire le répertoire /outils vers la page /maintenance.html :

RewriteRule /outils  /maintenance.html [R=302]

Rediriger toutes les pages en fonction d’un élément composant l’URL

Rediriger de manière définitive toutes URL commençant par morceau-d-url vers la racine du site :

RewriteRule ^morceau-d-url http://www.monsite.fr/ [R=301]

Avec la règle précédentes toutes les URLs suivante seront redirigé vers la racine du site :

http://www.monsite.fr/morceaudurl
http://www.monsite.fr/morceaudurl-lorem-ipsum/
http://www.monsite.fr/morceaudurl.html
http://www.monsite.fr/morceaudurl.pdf
http://www.monsite.fr/morceaudurl.doc
http://www.monsite.fr/morceaudurl/sous-repertoire/fichier.pdf
http://www.monsite.fr/morceaudurl/sous-repertoire/fichier.doc
http://www.monsite.fr/morceaudurl/sous-repertoire/fichier.html
http://www.monsite.fr/morceaudurl/sous-repertoire/sous-sous-repertoire/

Avec les directives RewriteRule et RewriteCond

Rediriger en fonction des paramètres des URLs

Le RewriteCond permet d’ajouter une condition d’exécution à la règle :

Dans le cas ou l’URL appelé est /article.php?id_article=158, on veut récupérer la valeur de id_article pour la réinjecter dans l’URL (notre condition) qui sera réécrite sous la forme /billet.php?id_billet=158 :

RewriteCond %{QUERY_STRING} ^id_article=([0-9]{1,4})$
RewriteRule ^(article)\.php ?$ /billet.php?id_billet=%1 [L,NC,R=301]

Rediriger l’ensemble des pages de votre site du domaine vers un sous-domaine

Dans le cas ou le domaine de l’URL appelé est monsite.fr et que l’on souhaite rediriger toutes les URLs vers le sous-domaine www :

RewriteCond %{HTTP_HOST} ^monsite.fr$
RewriteRule ^(.*) http://www.monsite.fr/$1 [QSA,L,R=301]

Rediriger l’ensemble des pages de votre site du protocole HTTP vers le protocole HTTPS

Après vous être assuré d’avoir correctement installé le certificat SSL, les instructions ci-dessous vous permettront de rediriger le visiteur vers la version sécurisée des pages (HTTPS) en conservant toute les adresses du site.

RewriteEngine On
RewriteCond %{SERVER_PORT} 80
RewriteRule (.*) https:// %{HTTP_HOST} %{REQUEST_URI} [L,R=301]

Dans le cas ou ce n’est pas le port 80 (en général c’est celui-ci), il convient d’indiquer ici le bon numéro de port ouvert par votre hébergement pour le web.

Rendre privé votre site sans programmation

Restriction par IP

Autorise les IPs 127.0.0.1 et 109.190.87.160 :

Order Deny,Allow
Allow from 127.0.0.1 109.190.87.160 localhost
Deny from all

Restriction par mot de passe

Demande un mot de passe à tous les visiteurs se présentant sur le site

AuthUserFile /url/absolue/vers/le/fichier/.htpasswd

AuthType Basic
AuthName "Protected Area"
Require valid-user

Restriction par IP ou par mot de passe

Combine les deux exemple ci-dessus. On autorise les IPs 127.0.0.1 et 109.190.87.160 et on demande un mot de passe pour toutes les autres :

AuthUserFile /url/absolue/vers/le/fichier/.htpasswd
AuthType Basic
AuthName "Protected Area"
Require valid-user

Order Deny,Allow
Allow from 127.0.0.1 109.190.87.160 localhost
Deny from all

Satisfy any

Exploitation d’une faille Apache pour contourner la protection htaccess/htpasswd

Sans rentrer dans le détail, il existe une faille Apache pour contourner assez facilement la protection tel que présenté ci-dessus. C’est une faille à la portée de beaucoup de personnes ayant un minimum de connaissance en développement web.

Les pirates exploitent tout simplement un élément de configuration par défaut d’Apache. Une page web peut-être appelé autrement qu’au travers d’un navigateur. Il y a foultitude de blog qui explique cela bien mieux que moi et ce n’est pas l’objet ici. Ce qu’il faut retenir, c’est que cette faille permet d’exploiter des données cachées, voir récupérer des contenus sensibles comme des mots de passe non crypté !

Cette négligence erreur de prise en compte de cette configuration est malheureusement encore assez courante :'(.

Voici une façon de s’en prémunir  :

AuthUserFile /url/absolue/vers/le/fichier/.htpasswd
AuthName "Protected Area"
AuthType Basic

<Limit GET POST>
    Require valid-user
</Limit>

<LimitExcept GET POST>
    Order Allow,Deny
    Deny from all
</LimitExcept>

Le code ci-dessous n’autorise que des requêtes POST ou GET utilisés par le navigateur web et rejette toutes les autres. Voici quelques infos en plus sur locallost.net (en anglais) si le sujet vous passionne intéresse.


Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.