Rediriger HTTP vers HTTPS avec .htaccess (redirection 301)
Vos visiteurs arrivent encore sur la version non chiffrée ? Quelques lignes dans le fichier .htaccess suffisent pour rediriger chaque appel HTTP vers HTTPS de façon permanente, en 301.
Votre serveur diffuse déjà le site en HTTPS, mais vos visiteurs arrivent toujours sur la version HTTP non chiffrée ? Il manque alors une redirection. Dans ce guide, vous mettez en place une redirection permanente (code de statut 301) de HTTP vers HTTPS à l'aide d'un fichier .htaccess.
Une redirection 301 est aussi le bon choix du point de vue du SEO : les moteurs de recherche transfèrent ainsi le positionnement de l'ancienne adresse HTTP vers l'adresse HTTPS, au lieu de traiter les deux variantes comme deux pages distinctes.
Prérequis
- Votre serveur fait tourner Apache. Pour nginx, la configuration est différente, nous y revenons plus bas.
- Un certificat SSL valide est déjà en place. Si ce n'est pas le cas, vous trouverez la marche à suivre dans l'article Installer gratuitement un certificat SSL avec Let's Encrypt.
- Vous avez accès au répertoire web de votre serveur, en SSH ou en FTP.
Important : ne mettez la redirection en place qu'une fois HTTPS fonctionnel. Sinon, vous renvoyez vos visiteurs vers une adresse qui affiche un avertissement de certificat.
Activer mod_rewrite et autoriser le fichier .htaccess
La redirection s'appuie sur le module Apache mod_rewrite. Activez-le, puis redémarrez Apache :
a2enmod rewrite
systemctl restart apache2
Pour qu'Apache lise réellement le fichier .htaccess, le VirtualHost doit l'autoriser. Vérifiez dans la configuration sous /etc/apache2/sites-available/ que AllowOverride All est bien défini pour votre répertoire :
<Directory /var/www/MonDomaine.fr>
AllowOverride All
Require all granted
</Directory>
Si la valeur est AllowOverride None, votre fichier .htaccess est ignoré en silence. Après une modification du fichier VirtualHost, un redémarrage d'Apache est nécessaire.
Créer le fichier .htaccess
Placez-vous dans le répertoire qui contient votre site web :
cd /var/www/<VOTRE-REPERTOIRE-WEB>
Ouvrez le fichier .htaccess dans l'éditeur. S'il n'existe pas encore, la commande le crée :
nano .htaccess
Saisissez les lignes suivantes. Cette variante vérifie directement si la connexion est chiffrée, puis ajoute à la cible le chemin complet qui a été appelé :
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
Enregistrez le fichier avec « CTRL + X », puis « Y » et « Entrée ».
Variante basée sur le port du serveur
Sur les configurations plus anciennes, où la variable HTTPS n'est pas définie, il faut interroger le port à la place :
RewriteEngine On
RewriteCond %{SERVER_PORT} !^443$
RewriteRule (.*) https://%{HTTP_HOST}/$1 [R=301,L]
Variante derrière un reverse proxy ou un load balancer
Si un reverse proxy ou un load balancer se trouve devant votre Apache et termine lui-même le chiffrement, Apache reçoit une requête non chiffrée. La règle ci-dessus provoquerait alors une redirection sans fin. Dans ce cas, exploitez l'en-tête que le proxy transmet :
RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
Tester la redirection
Appelez votre domaine dans le navigateur via http://. Vous devriez arriver immédiatement sur https://. En ligne de commande, vous vérifiez le code de statut directement :
curl -I http://MonDomaine.fr
La sortie doit contenir HTTP/1.1 301 Moved Permanently, ainsi qu'une ligne Location avec l'adresse HTTPS. Si un code de statut 302 apparaît à la place, vérifiez que la règle contient bien R=301.
Activer HSTS (optionnel)
Avec HTTP Strict Transport Security, vous demandez au navigateur de ne plus jamais appeler votre domaine en HTTP. Le premier appel non sécurisé disparaît ainsi. Activez d'abord le module nécessaire :
a2enmod headers
systemctl restart apache2
Complétez ensuite le fichier .htaccess :
<IfModule mod_headers.c>
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"
</IfModule>
Attention : HSTS vous engage pour un an. Tant que la valeur est enregistrée dans le navigateur, le domaine n'est plus joignable en HTTP. Ne posez cet en-tête qu'une fois HTTPS parfaitement stable et tous les sous-domaines munis d'un certificat valide.
Erreurs fréquentes
- Boucle infinie (« too many redirects ») : presque toujours la conséquence d'un proxy placé en amont. Utilisez la variante avec
X-Forwarded-Proto. - Rien ne se passe : soit mod_rewrite n'est pas activé, soit le VirtualHost n'autorise aucun fichier .htaccess (
AllowOverride None). - Erreur 500 après l'enregistrement : une faute de frappe dans le fichier .htaccess. La cause exacte figure dans le journal d'erreurs d'Apache, sous
/var/log/apache2/error.log. - Contenu mixte : la page se charge bien en HTTPS, mais elle appelle encore des images ou des scripts en HTTP. Corrigez ces adresses dans votre code source ou dans la base de données.
- Fichier introuvable : le fichier .htaccess commence par un point, il est donc masqué. La commande
ls -lavous le montre.
Redirection sans .htaccess
Un fichier .htaccess est relu à chaque requête. Si vous avez accès à la configuration du serveur, il est plus rapide de placer les règles directement dans le VirtualHost. Pour le VirtualHost HTTP, ceci suffit :
<VirtualHost *:80>
ServerName MonDomaine.fr
Redirect permanent / https://MonDomaine.fr/
</VirtualHost>
Si vous utilisez nginx au lieu d'Apache, il n'existe pas de fichiers .htaccess. La redirection se déclare alors dans le bloc server du port 80 :
server {
listen 80;
server_name MonDomaine.fr www.MonDomaine.fr;
return 301 https://$host$request_uri;
}
Questions fréquentes
Pourquoi une redirection 301 et pas une 302 ?
Mon fichier .htaccess est ignoré. D'où cela vient-il ?
Pourquoi est-ce que je me retrouve dans une boucle infinie ?
Est-ce que cela fonctionne aussi avec nginx ?
Faut-il activer HSTS en plus ?
2022-2026 KernelHost GmbH. Tous droits réservés. Ce guide est protégé par le droit d'auteur. Sa republication sur d'autres sites web, même partielle ou sous une forme modifiée, n'est pas autorisée sans notre accord écrit. Les citations accompagnées de la source et d'un lien sont expressément les bienvenues.

