Apache : redirection HTTP vers HTTPS avec un fichier .htaccess

I. Présentation

Dans ce tutoriel, nous allons voir comment configurer une redirection HTTP vers HTTPS pour votre site Internet hébergé sur un serveur Apache.

Lorsque l'on configure un site sous Apache, soit l'on utilise un fichier de configuration, soit l'on utilise un fichier .htaccess, mais on peut aussi mixer les deux. Sur un hébergement mutualisé basique où l'on va héberger un site, nous n'avons pas accès directement à la configuration d'Apache, ce qui nécessite d'utiliser un fichier ".htaccess" à la racine du site pour apporter des modifications sur la configuration.

Pour rediriger automatiquement les flux HTTP vers HTTPS avec Apache, il va falloir réécrire les URL pour que "http" devienne "https" dans le but d'avoir une connexion sécurisée. Même si votre site est accessible en HTTP et en HTTPS, il est préférable de rediriger tout le trafic vers une connexion HTTPS.

L'utilisation du fichier .htaccess pour déclarer des règles de réécriture est une pratique courante.

Redirection HTTP vers HTTPS sous IIS

II. Redirection HTTP vers HTTPS avec .htaccess

Je vous invite à vous connecter en SSH sur votre serveur dans le but de créer un fichier .htaccess à la racine du site. Si vous avez déjà ce fichier, vous pouvez simplement l'éditer.

Je pars du principe que la racine de mon site est :

/var/www/html/

Pour créer le fichier et l'éditer à l'aide de nano, cela donne :

nano /var/www/html/.htaccess

Ensuite, dans ce fichier il va falloir ajouter quelques lignes :

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

La règle "RewriteEngine On" permet d'activer le module de réécriture d'URL d'Apache, c'est-à-dire mod_rewrite. Ensuite, on crée notre condition avec "RewriteCond" qui va déclencher la règle "RewriteRule" dans le cas où cela correspond. En fait, la règle va se déclencher si le client se connecte à notre site en utilisant le port 80, correspondant au http. Si vous utilisez un autre port que le 80, il faudra remplacer la valeur "80" par votre port.

Dans ce cas, on réécrit l'URL : on conserve la même URL complète, mais on utilise le préfixe "https://". En complément, le fait d'indiquer "R=301" précise qu'il s'agit d'une redirection permanente : une bonne pratique et une information importante à donner aux moteurs de recherche.

Il y a une autre façon de faire et qui est l'occasion aussi d'ajouter "www" avant le nom de votre domaine, si vous le souhaitez ! Ce qui est important c'est de ne pas utiliser les deux (avec ou sans "www"). Si vous utilisez le bloc ci-dessous, modifiez le nom de domaine.

RewriteEngine On
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://www.it-connect.fr/$1 [R=301,L]

Ces règles doivent fonctionner dans la majorité des cas, mais je n'irais pas jusqu'à dire dans tous les cas. Si c'est sur votre propre serveur, ça devrait aller, mais parfois en fonction des hébergeurs il peut y avoir des restrictions.

Imaginons qu'il y ait un souci et que la règle ne fonctionne pas, essayez de remplacer "RewriteCond %{SERVER_PORT} 80" par la règle suivante :

RewriteCond %{HTTPS} !=on

Il y a également une autre alternative possible, ou disons une écriture différente :

RewriteCond %{HTTPS} off

III. Redirection HTTP vers HTTPS via le VirtualHost

Petit bonus, pour rediriger les flux HTTP vers HTTPS en modifiant directement la configuration d'Apache, c'est-à-dire la configuration de votre VirtualHost, il suffit d'indiquer cette règle :

Redirect permanent / https://www.it-connect.fr/

Bien sûr, modifiez avec votre nom de domaine 😉. Même si c'est possible, il n'est pas nécessaire d'utiliser RewriteCond et RewriteRule dans ce cas.

Partagez cet article Partager sur Twitter Partager sur Facebook Partager sur Linkedin Partager sur Google+ Envoyer par mail

Florian Burnel

Ingénieur système et réseau et cofondateur d'IT-Connect. Je souhaite partager mon expérience et mes découvertes au travers de mes articles. Généraliste avec une attirance particulière pour les solutions Microsoft et le scripting. Bonne lecture.

florian has 3218 posts and counting.See all posts by florian

4 thoughts on “Apache : redirection HTTP vers HTTPS avec un fichier .htaccess

  • Hello !

    Je ne suis pas trop d’accord avec la condition :

    RewriteCond %{SERVER_PORT} 80

    elle dit en gros que ca va marcher que pour le pour 80 , hors tu peux faire de l’http sur un autre port ou meme faire de l’https sur le 80

    Donc d’une manière plus générique je pense que vous pouvez remplacer par la condition :

    RewriteCond %{HTTPS} off

    qui du coup fait quelque chose de plus basique et portable : si on est pas en https , alors redirect vers https

    Répondre
    • Hello =)

      C’est vrai que pour un site publié sur Internet, ce sera sur le port 80, mais comme tu l’as dit on peut utiliser un autre port. Je vais spécifier qu’il faut modifier le numéro de port en fonction de celui que l’on utilise. Merci pour ta remarque pertinente !

      Merci pour la condition « RewriteCond %{HTTPS} off » je vais ajouter cette alternative dans l’article ;-).

      Bonne journée
      Florian

      Répondre
  • juste envie de poser mon grain de sel, si on est chez un hébergeur mutualisé qui ne propose pas de certificats https pour ses serveurs, j’ai juste envie de les fuir comme la peste.
    Malgré il est vrai qu’on a pas toujours le choix (certaine boite refusant d’évoluer)

    Répondre
  • Attention, dans le cas d’un site qui reçoit ou envoie des données sensibles (par exemple un webmail), ce genre de redirection de HTTP vers HTTPS peut être considéré comme une faille de sécurité. Je m’explique. Avec ce mécanisme, vous risquez d’habituer vos visiteurs à visiter le site en HTTP, et à reposer sur la redirection pour se retrouver en HTTPS.

    Si un attaquant parvient à s’introduire comme man-in-the-middle, par exemple en exposant un réseau wifi ouvert, la première chose qu’il fera, c’est intercepter la redirection sans la transmettre au client. Ensuite, le client demandera des pages en HTTP, le man-in-the-middle ira les chercher en HTTPS et les servira au client en HTTP.

    Pour éviter ce genre de scénario, le mieux est d’utiliser HTTP Strict Transport Security, un en-tête HTTP qui fixe cette redirection dans le navigateur, qui ira ensuite systématiquement visiter le site en HTTPS et jamais en HTTP.

    Répondre

Laisser un commentaire

Votre adresse e-mail 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.