Codes redirection https
Portrait Olivier Duffez

Olivier Duffez

Créateur de WebRankInfo,
consultant en référencement

Tout pour la redirection HTTP vers HTTPS (.htaccess, Apache, IIS, Nginx, Lighttpd)

Si votre site est en HTTPS, il faut mettre en place une redirection 301 de toute URL en HTTP vers son équivalent en HTTPS. Idem pour l'inverse ! Cet article explique comment faire (sous Apache, IIS, Lighttpd et Nginx).

Article mis à jour le 27/08/2022 (vérification des codes), publié initialement le 17/12/2014

Si vous venez de passer votre site de HTTP vers HTTPS, n'oubliez pas qu'il faut rediriger toutes les anciennes URL (en HTTP) vers les nouvelles (en HTTPS).

Ceci s'applique aussi à un site qui dès le début est en HTTPS, car il est probable que certains feront des liens (sans s'en rendre compte) vers le site en HTTP.

Gérer la redirection au niveau du VirtualHost sur Apache

Une bonne façon est de mettre en place la redirection directement dans le fichier de configuration qui définit votre VirtualHost. Ce fichier peut se trouver à divers emplacements selon le système que vous utilisez (voir ici pour Apache).

Si vous voulez rediriger toute URL en HTTP vers l'URL équivalente en HTTPS, ajoutez ceci dans le virtualhost qui correspond au HTTP :

Redirect permanent / https://www.example.com/

(pensez à remplacer par le nom de votre site)

Si vraiment vous voulez utiliser RewriteRule (ce n'est pas une bonne idée a priori, voyez les commentaires) :

RewriteEngine on
RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

Ceci fonctionne pour toutes les URL gérées par le virtualhost, avec ou sans sous-domaine.

Evidemment, si c'est l'inverse qui vous intéresse, si vous voulez rediriger toute URL en HTTPS vers l'URL équivalente en HTTP, ajoutez ceci dans le virtualhost qui correspond au HTTPS :

Redirect permanent / http://www.example.com/

(pensez à remplacer par le nom de votre site)

Si vraiment vous voulez utiliser RewriteRule (ce n'est pas une bonne idée a priori, voyez les commentaires) :

RewriteEngine on
RewriteRule .* http://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

Gérer la redirection dans un fichier .htaccess

Vous pouvez aussi configurer ces redirections dans un fichier .htaccess à la racine de votre site.

Rediriger HTTP vers HTTPS avec .htaccess

Dans ce cas, si vous voulez rediriger toute URL en HTTP vers l'URL équivalente en HTTPS, ajoutez ceci dans le fichier .htaccess à la racine de votre site :

RewriteEngine on
RewriteCond %{HTTPS} !=on
RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

La condition %{HTTPS} !=on signifie "l'URL est demandée sans le protocole HTTPS". Vous pouvez aussi tester RewriteCond %{HTTPS} off

Sur certains serveurs/hébergeurs, cela ne fonctionne pas de tester cette variable. Il faut alors passer par le n° de port, sachant que HTTP est sur le port 80 et HTTPS est sur le port 443.

Sur OVH, voici le code à utiliser :

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

Sur Gandi (instance Simple Hosting), voici le code à utiliser :

RewriteEngine on
RewriteCond %{REQUEST_SCHEME} =http
RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

(attention à ne pas mettre d'espace entre = et http)

Rediriger HTTP vers HTTPS et gérer www en même temps

Vous le savez, il ne faut pas créer de contenus dupliqués en laissant votre site accessible aussi bien avec que sans www. Il faut faire une redirection de la mauvaise vers la bonne structure. C'est encore mieux de faire les 2 redirections en 1 seul coup pour éviter les chaînes de redirections.

Si la version officielle de votre site contient le sous-domaine www, essayez ce code (remplacez le nom de domaine example.com par le vôtre) :

RewriteEngine On
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)$ [NC]
RewriteRule ^.*$ https://www.%1%{REQUEST_URI} [L,NE,R=301]

Rediriger HTTPS vers HTTP avec .htaccess

Si à l'inverse vous voulez rediriger toute URL en HTTPS vers l'URL équivalente en HTTP, ajoutez ceci dans le fichier .htaccess à la racine de votre site :

RewriteEngine on
RewriteCond %{HTTPS} on
RewriteRule .* http://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

Sur OVH, voici le code à utiliser dans le fichier .htaccess à la racine de votre site pour bloquer votre site en HTTP :

RewriteEngine on
RewriteCond %{SERVER_PORT} 443
RewriteRule .* http://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

Redirection HTTP vers HTTPS avec d'autres serveurs

Redirection vers HTTPS avec un serveur IIS

Pour IIS 7, IIS 8 et supérieur, les explications sont fournies ici par Microsoft ou dans cet article (en anglais). En gros, il existe 3 méthodes (de la plus à la moins recommandée) :

  • Redirection IIS avec le module URL Rewrite
  • Redirection IIS avec le document par défaut (default.asp)
  • Redirection IIS avec le module HTTP Redirect

Redirection vers HTTPS avec un serveur Lighttpd

Pour Lighttpd, voici comment faire (source) :

Exemple 1, on redirige tout :

$HTTP["scheme"] == "http" {
    # capture vhost name with regex conditiona -> %0 in redirect pattern
    # must be the most inner block to the redirect rule
    $HTTP["host"] =~ ".*" {
        url.redirect = (".*" => "https://%0$0")
    }
}

Exemple 2, pour une seule URL spécifique :

$HTTP["scheme"] == "http" {
    $HTTP["host"] =~ ".*" {
        url.redirect = ("^/phpmyadmin/.*" => "https://%0$0")
    }
}

Exemple 3, pour un vhost et une seule URL spécifique :

$HTTP["scheme"] == "http" {
    $HTTP["host"] == "sth.example.com" {
            url.redirect = ("^/phpmyadmin/.*" => "https://sth.example.com$0")
    }
}

Vous pouvez aussi utiliser des tests de ce type:

if $HTTP["scheme"] == "https"

Redirection vers HTTPS avec un serveur Nginx

Pour Nginx, voici le code à mettre dans votre fichier de configuration (source) :

server {
	listen 80 default_server;
	listen [::]:80 default_server;
	server_name _;
	return 301 https://$host$request_uri;
}

ou bien un code un peu plus robuste dans lequel on définit quels hostnames sont concernés :

server {
	listen 80 default_server;
	listen [::]:80 default_server;
	server_name example.com www.example.com;
	return 301 https://$server_name$request_uri;
}

il faudra aussi un paramétrage pour le port 443 (il faudra d'autres détails, d'où le [...]) :

server {
	listen 443 ssl;
	server_name example.com www.example.com;
	[...]
}

Pour Nginx, vous trouverez d'autres détails dans cet article.

Remarques importantes

  • en cas d'autres RewriteRule, il faut veiller à l'ordre et aux conflits : à vous de vérifier et tester
  • en théorie mod_rewrite n'est pas la meilleure manière de procéder (voir ici) bien qu'en pratique ce soit un détail
  • les choses peuvent se compliquer si le serveur gère plusieurs domaines différents en https
  • il faudra aussi penser à combiner avec la gestion du www
  • si vous avez de la réécriture d'URL, vérifiez que les règles n'interfèrent pas (on ne sait jamais)

Si besoin, consultez mon tuto sur les redirections ou posez votre question dans le forum .htaccess de WRI.

Questions réponses

Comment faire la redirection HTTP vers HTTPS sur WordPress ?

WordPress ne propose pas de moyen de gérer le passage à HTTPS directement dans le backoffice. Vous pouvez tester des plugins WordPress comme Really Simple SSL mais ne les ayant pas testés je n'ai pas d'avis.

Si vous avez un serveur dédié, gérez les redirections dans la config de votre serveur (VirtualHost sous Apache par exemple).

Sinon, suivez les consignes ci-dessus pour gérer les redirections dans le fichier .htaccess.

Comment rediriger HTTP vers HTTPS sur Joomla ?

Les méthodes ci-dessus fonctionnent mais vous pouvez aussi aller dans les paramètres, rubrique "Paramètres du serveur" > "Forcer HTTPS" et choisir "Administration et site".

Redirection HTTPS sur Drupal

Idem : pour faire une redirection automatique HTTPS d'un site sous Drupal, suivez ce tuto (en anglais).

Comment faire la redirection HTTP vers HTTPS chez OVH ?

Si vous avez un serveur dédié OVH, gérez les redirections dans la config de votre serveur (VirtualHost sous Apache par exemple). Sinon, sur un serveur mutualisé OVH, comme indiqué dans l'article, le code pour les redirections dans .htaccess est légèrement différent du standard. Voyez ci-dessus les détails.

La redirection est-elle automatique ?

Tant que vous n'ajoutez pas les codes de redirections, ça ne sera pas automatique et vous risquerez d'avoir votre site en double (HTTP et HTTPS). Ce n'est pas bon pour le SEO...

Mais une fois les codes en place, toute URL en HTTP sera automatiquement redirigée vers l'équivalent en HTTPS.

Où trouver des certificats SSL ?

Il en existe des gratuits (par exemple Let's Encrypt) et de très nombreux payants. Faites une recherche ici par exemple. Quel que soit le certificat, s'il est bien à jour et bien configuré/installé, vous bénéficierez du cadenas vert ("site sécurisé" / "secure site").

Et vous ?

Merci de me prévenir si ces exemples de configuration ne fonctionnent pas chez vous (précisez votre serveur et votre cas) ou si vous connaissez les codes à utiliser pour d'autres serveurs que Apache.

Si vous avez besoin d'aide, postez une discussion dans le forum .htaccess et redirections

Crédits : image d'illustration

Cet article vous a-t-il plu ?

Note : 3.9 (56 votes)
Cliquez pour voter !

67 commentaires

sonia

Un grand merci!! J'ai passé des jours à essayer de trouver une solution à mon problème (site non sécurisé malgré l'activation du SSL sur OVH)!

Vos explications sont claires et illustrées, j'ai réglé le problème en 2min!

Merci!

Claire

Merci ! vous m'avez donné la piste pour (enfin) débloquer une après midi de galère.
Donc pour un passage en HTTPS sous WordPress, bien penser à faire la redirection 301 avant la réécriture d'URL dans le HTACCESS...
:)

Xis

Sauf qu'en oubliant de modifier "example.com", plus moyen de revenir en arrière, même en supprimant le .htaccess?
Donc, mon url redirige toujours vers "example.com ! Une solution

Olivier Duffez

Remettre le bon fichier .htaccess doit suffire, sauf peut-être pour tester des redirections si jamais le navigateur gère du cache (ça peut arriver par exemple avec Chrome). Il suffit de tester avec un outil d'analyse des redirections.

Arnaud

Bonjour Olivier,
Top ce dossier ! Merci !
En revanche, sauf erreur de ma part les redirections vers les ressources (images, CSS, ...) ne sont pas abordées.
Ne faut-il pas ajouter un bout de code pour que ces resources soient directement redirigées vers HTTPS ?

Pour info, voici ce que j'ai utilisé avec un WordPress basic
# HTTP vers HTTPS et gérer www en même temps
RewriteEngine On
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)$ [NC]
RewriteRule ^.*$ https://www.%1%{REQUEST_URI} [L,NE,R=301]

Merci encore !
Arnaud

Olivier Duffez

Bonjour Arnaud
Les règles que je propose, tout comme les tiennes, ne font pas de distinction sur le type de document, donc les pages HTML comme toutes les autres ressources sont redirigées.
Si bien que je ne comprends pas bien ton commentaire...

valerie

Bonsoir Olivier,
Le lien du tuto pour rediriger automatiquement en HTTPS les URL d'un site sous Prestashop est erroné (il concerne Drupal).
Pourriez-vous faire la correction dès que possible ?
D'avance, merci.
Cordialement.
Valérie

Olivier Duffez

Non, les 2 liens sont bons...

thp67

Bonjour et très bonnes explications.

Pourriez-vous aussi expliquer comment utiliser les mod_expires et mod_header, qui fonctionnent très bien sur Safari iOS, mais qui pose de gros problèmes sur Chrome android ?

Important : ça concerne des web apps, et non pas un site.

Voici un htaccess, par exemple, qui devrait fonctionner mais sans succès avec Chrome android, alors que le htaccess/htpasswd fonctionne très bien par contre :

ExpiresActive On
ExpiresDefault "access plus 2600000 seconds"

Header set Cache-Control "max-age=2600000, public"

J'ai trouvé plein d'autres codes, plus ou moins différents et complexes, mais toujours le même problème. Pourtant, quand il y a une ligne ou un module ou une directive qui est mal écrite, Chrome indique une erreur, donc c'est plutôt contradictoire...

Merci si vous avez une idée.

Olivier Duffez

Mieux vaut créer une nouvelle discussion dans le forum car la demande est assez spécifique. Merci !

jebou

Merci mille fois pour la règle indiquée pour "simple hosting"sur gandi.
Ca marche!

RewriteEngine on
RewriteCond %{REQUEST_SCHEME} =http
RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

Vous m'avez sauvé. J'ai essayé pendant une heure toutes les règles préconisées sans succès, y compris celle qui est écrite dans la doc de gandi.

Meilleurs voeux pour 2019.

nini

Bonjour,

Mon hébergeur ONLINE.NET me demande de mettre ce code dans mon htaccess

RewriteEngine On
RewriteCond %{HTTP:HTTPS} !on
RewriteRule (.*) https://%{SERVER_NAME}/$1 [QSA,L,R=301]

ESt ce que cela revient au même que vos exemples pour rediriger le site en https avec de bonne redirection 301 ?

Merci de votre aide

Olivier Duffez

Je ne sais pas, il suffit de tester...

Olivier Duffez

Merci de créer une nouvelle discussion dans le forum redirections htaccess, ça sera plus efficace pour avoir des solutions

Yeye

Bonjour,

Avant de faire un boulette, j'ai une question sur la redirection sur virtualhost avec

Redirect permanent / https://www.example.com/

Chez OVH, je vais dans l'onglet dans l'onglet redirection et j'en cré une nouvelle. Je sélection aussi l'adresse avec www devant et je fait redirection vers une autre adresse web puis redirection visible puis permanente puis je rajoute l’adresse en https. Le soucis c'est quand je fait enregistrer celui ci me demande si je veut écraser les redirections déjà existantes... qui sont celles par défaut.

milan

Bonjour,
Après une migration de http vers https, selon vous, est-il nécessaire de conserver la redirection mise en place pour gérer le duplicate content entre la version avec www et celle sans www puisque de toute façon la redirection https redirige systématiquement vers la version avec www ?

Olivier Duffez

La redirection http vers https ne gère peut-être que le cas où l'URL à rediriger est en http, à vous de tester sur votre site.
En supposant que le site a les www, il faut avoir ces redirections 301 en place (1 seule redirection à chaque fois, pas 2 qui s'enchaînent) :
- http avec www vers https avec www
- http sans www vers https avec www
- https sans www vers https avec www

Louis_Dea

Question pour vous, avant de transféré mon site en HTTPS, j'avais différentes redirections actives dans mon fichier .htaccess.

Ex :
Redirect 301 /ancienne-url/ http://www.example.com/nouvelle-url/

Par contre, depuis que j'ai transféré mon site vers le HTTPS, je remarque que mes redirections ne sont pas directes.

Ex :
http://www.example.com/ancienne-url/ redirige vers https://www.example.com/ancienne-url/ qui redirige vers
http://www.example.com/nouvelle-url/ qui redirige vers
https://www.example.com/nouvelle-url

Quelqu'un a vécu cette problématique? Avez-vous des pistes de solutions?

Merci!

Olivier Duffez

il faut modifier les règles de redirection du .htaccess pour pointer directement vers https (ou + simplement utiliser des URL relatives)
pour la suite, merci d'utiliser le forum en créant une nouvelle discussion, ça sera bien plus pratique pour suivre (et avoir + de conseils)

ber59

Bonsoir,
je dois passer plus de 1.500 meta canonical en https.
Connaitriez-vous un code de redirection pour ça ?
Merci

Olivier Duffez

Je n'ai pas compris, il suffit de modifier le code qui génère l'URL de la canonique

David

Bonjour Olivier,

j'ai utilisé la solution suivante en passant par le .htaccess :

RewriteEngine on
RewriteCond %{HTTPS} !=on
RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

Tout est OK pour le transfert. Seulement, j'ai quelques partenaires qui sont présents sur le site en iframe et qui ne sont pas compatibles HTTPS. Si j'appelle en HTTPS leur url dans l'iframe, cela ne fonctionne pas et si je la laisse en HTTP, rien ne s'affiche. Pour le second cas, j'ai cru comprendre qu'il n'était pas possible d'ouvrir une iframe ne http sur une page appelée en https.

Connais-tu (ou quelqu'un d'autre) une solution en attendant que tous les partenaires soient compatibles ?

Merci

Sauzer

Bonjour

Très bon article, merci bien

Bonne journée à vous tous

Aude

Bonjour,
Je souhaite une page d'accueil avec :
-le https
-le www
-la redirection de index.html vers /

En gros je souhaite que ma page d'accueil soit :
https://WWW.monsite.com

L'ordre a t'il une importance dans le .htaccess ?

Peut-on définir ces redirections en 1 seule condition ?

Merci de votre aide

Gingko

Bonjour.

Ce que je voudrais faire, moi, c'est maintenir (au moins temporairement) les deux versions de certains de mes sites (HTTP et HTTPS), mais faire en sorte qu'une fois que le visiteur a choisi entre l'une des deux, il soit assuré d'y rester.

Or dans ces sites il y a parfois des liens internes formulés absolument, qui sont nécessairement effectués soit en HTTP, soit en HTTPS, mais pas les deux à la fois.

De plus ces sites ont parfois des sous-domaines avec des liens réciproques (genre http://www.monsite.com/ et http://forum.monsite.com/), et j'aimerais également que le visiteur qui passe de l'un à l'autre soit assuré de rester dans le mode par lequel il est entré.

En plus, dans un forum de discussion, les liens peuvent être ajoutés par les utilisateurs, et je ne peux pas avoir d'assurance qu'un utilisateur donné qui va poster un lien interne dans le futur va toujours indiquer celui-ci en HTTP ou bien en HTTPS.

J'ai donc pensé à utiliser des règles de réécriture conditionnelles basés sur le référent, mais en pratique ça ne marche pas à cause de la RFC 7231 (section 5.5.2) : "A user agent MUST NOT send a Referer header field in an unsecured HTTP request if the referring page was received with a secure protocol" (un "user agent" ne doit pas envoyer d'en-tête "Referer" dans une requête HTTP non sécurisée si la page de référence a été reçue avec un protocole sécurisé).

Existe-t-il un autre moyen de tester, dans une règle de réécriture, le fait de savoir si le visiteur est arrivé sur le site via une page du même site ou du même domaine en mode HTTP ou HTTPS ?

Olivier Duffez

pourquoi vouloir faire un truc aussi compliqué ?

Charles

Bonjour,

Précision pour lighttpd

Si la redirection automatique http->https ne marche pas
regardez bien dans les logs d'erreurs et faire un restart

si vous avez un
WARNING: unknown config-key: url.redirect (ignored)

il faut activer le modules de redirection dans modules.conf
server.modules = (
"mod_redirect",
...
)

Ce module n'est pas activé par défaut.

PS: j'ai bien galéré pour trouver le problème

Amine

Bonjour,

Ne faites pas de passage au HTTPS, c'est un piège de Google, mon site est tombé carrément dans ce piége est aujourd'hui plutôt de gagner quelques places promis je suis à deux doigts de fermer l'entreprise.

Le HTTPS concerne uniquement les sites e-commerces; Portails au autres vous étés prévenus ne faites pas cette bêtise ou vous allez tout perdre.

Olivier Duffez

@Amine : si tout est bien préparé, il ne doit pas y avoir de chute...

Macfly

La principale question que je me pose c'est l'effet sur les backlinks, à priori avec la redirection il fonctionnent tous mais ce sont tout de même des backlink redirigés, perdent-ils de la puissance ? Dieu GG seul le sait...

Macfly

Je viens de passer un de mes petits sites en https, opération réalisée en 15 minutes.
Ne pas oublier de modifier toutes les url présentes dans le code http://www.monsite ... par https://www.monsite.... (ça concerne les liens, le chargement de scripts, de css, images, etc, etc...)

Maxence

Personnellement j'ai opté pour un plugin sur WordPress qui fait automatiquement la redirection et corrige les erreurs de conflit : "Really Simple SSL". Aucun réglage et tres léger !

Jérémy

Pour ma part j'ai testé différents codes pour rediriger correctement de http vers https en traitant également les adresse non-www vers les www.
Beaucoup d'exemples cités créaient trop de redirections intutiles mais en fouillant bien j'ai trouvé cette petite pépite pour mon .htaccess :

RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^(.*)$ https://www.mon-site.fr/$1 [L,R=301]
RewriteCond %{SERVER_PORT} !^443$
RewriteRule ^(.*)$ https://www.mon-site.fr/$1 [L,R=301]

Un petit outil cool aussi pour valider vos éventuels erreurs SSL :
https://www.linksspy.com/seo-tools/free-seo-ssl-scan/new

Bruno

Bonjour a tous
Merci a Olivier
et merci a Jérémy pour la pépite et le lien outil cool
maintenant mon résultat :
La configuration de SSL pour ce site Web est absolument parfaite et n'affecte pas négativement les classements
yiiipiii

Pipiou

Je confirme pour la pépite avec serveur mutualisé PHPNET et site wordpress version 4.9.8–fr_FR. Merci beaucoup pour la contrib !

Calinougriffe

Merci Jeremy , je galère sur ma redirection qui n'est pas un wordpress depuis 4 mois, divers site et après avoir tout essayé ici j'ai consulté les commentaires et effectivement c'est une pépite ! je me suis inscrit uniquement pour remercier le créateur et ton commentaire.
Peace

Chris Tinho

Bonjour Olivier,

Merci pour cet article.

Je suis sur OVH en mutualisé et mon site est un CMS (WORDPRESS), voici ce que j'ai mis dans mon htaccess, qu'en pensez-vous j'aimerais avoir votre avis :

# Redirection HTTP vers HTTPS 
RewriteEngine On
RewriteCond %{SERVER_PORT} ^80$ [OR]
RewriteCond %{HTTPS} =off
RewriteRule ^(.*)$ https://www.acadezik.com/$1 [R=301,L]

# Redirection du non-www vers www en HTTPS
RewriteEngine On
RewriteCond %{HTTP_HOST} ^monsite.com [NC]
RewriteRule ^(.*)$ https://www.acadezik.com/$1 [R=301,L]

Merci pour votre aide
Chris

Olivier Duffez

Bonjour Chris
je n'ai malheureusement pas le temps de tester tous les codes qu'on m'envoie, il vaut donc mieux poser la question dans le forum htaccess, merci !

Olivier Ménart

Bonjour,

Je crois que j'ai tout essayé pour rediriger mon site de https -> http, mais rien n'y fait.

C'est un wordpress hébergé chez OVH, j'imagine donc que je dois uniquement appliquer la règle suivante en tête de mon .htaccess :

RewriteEngine on
RewriteCond %{SERVER_PORT} 443
RewriteRule .* http://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

ou alors dois-je également utiliser

RewriteEngine on
RewriteCond %{HTTPS} on
RewriteRule .* http://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

??

J'ai bien tenté de vider tous les caches possibles, mais quand je tente de me connecter à mon site avec https, je tombe inévitablement sur la page "Votre connexion n'est pas sécurisée".

Merci pour votre aide !

CNek

Merci beaucoup !
Utile pour assurer une transition HTTP > HTTPS un peu capricieuse sur un site en mutu chez OVH.
En attendant un debug, la règle .htaccess décrite pour forcer HTTPS en HTTP fait bien l'affaire ;)

Gérard Barré

Bonjour,

ARticle intéressant et pertinent et e viens de passer récemment mon blog sous dotclear en https. Hébergé en mutualisé chez OVH, il fonctionne correctement sauf les redirections http > https. Il respecte les consignes d'installation optimisée dotclear qui sépare les répertoires du blog (thème et public), les plugins et le moteur.

Il fonctionne en path_info et pour simplifier l'url, un fichier .htacces est dans le répertoire du blog :
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.*) index.php/$1

Actuellement le .htaccess à la racine qui devrait faire la redirection contient :
RewriteEngine On
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://www.sentier-nature.com/$1 [R,L]

Le répertoire /blog est nommé /montagne

Avec Chrome ou Edge sur mon PC, les url : http://www.sentier-nature.com/ et https://www.sentier-nature.com/montagne/ ne sont pas redirigées, ni aucune url de billet appelée directement (les liens sont redirigés).

Avec chrome sur mobile sous androïd, http://www.sentier-nature.com/ semble redirigée. Mais aucune des autres appelées directement.

Pour le .htaccess à la racine, j'ai aussi essayé sans meilleur résultat le code:
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [L]

D'autres essais ont provoqué des erreurs serveur (500).

Désolé de publier les url en cause. Merci de vos lumières.
Cordialement

Jérémy C

Enorme merci à tous !!
J'ai enfin réussi à paramétrer une redirection 301, dans le cadre d'un passage en https. Après m'être arraché les cheveux pendant une journée (on ne peut pas plus novice que moi), je vais vous donner ce qui a fonctionné chez moi :
Paramètres :
Hébergement chez OVH, site sous wordpress, .htaccess à la racine (dans www), je fonctionne avec filezilla pour envoyer les données sur serveur.
Code à ajouter (au début!) dans le fichier .htaccess :

RewriteEngine On
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://www.monsite.fr/$1 [R=301,L] (((ou .com évidemment..)))

Attention, après avoir tout essayé (y compris mod_rewrite), seul ce code a fonctionné mais il faut le placer tout au début du fichier sans toucher au reste, sinon ça ne fonctionnera pas.
Tout fonctionne parfaitement, que ce soit en http ou en https, avec www ou sans www, tout est redirigé vers https://www.monsite.fr.

Un grand merci à vous, c'est grâce à la lecture des tutos et des commentaires que j'y suis parvenu.

A bientôt

Sarah2612

Bonjour,

Je souhaiterais que les URL en https soit redirigé en HTTP (je suis chez OVH) mais je ne sais pas où placer votre code dans mon fichier .htaccess. Pouvez-vous m'aider ? Merci d'avance !!

# BEGIN WordPress
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
# END WordPress

Olivier Duffez

Autant placer le code pour les redirections en haut du fichier (sans oublier de commencer par RewriteEngine On)

Jeanbi

Bonjour,

Je vous en remercie.

Un plaisir.

Jeanbi

Bonjour,

Je viens de passer en HTTPS, mais j'ai quelque doute.

Faut-il envoyer chez google deux sitemaps? un pour la version http, un autre pour la version https?

Concernant les redirection avec en sans "www", faut-il aussi rediriger la version https avec et sans "www ?

Je vous remercie d'avance les commentaires.

Olivier Duffez

Oui Jeanbi, il faut envoyer 2 sitemaps (au moins dans un premier temps, ensuite celui du HTTP pourra être supprimé).
Oui, la redirection avec/sans www doit aussi fonctionner sur la version HTTPS

Christophe

Bjr,

Pour avoir fait quelques tests de redirection http->Https depuis le passage en Https chez OVH, avec un logiciel d' AUDIT de PowerSuite, j'ai remarqué que pour avoir vraiment la prise en compte effective des de la version Https du iste, surtout avec Prestashop et WordPress, il est important de placer les lignes de réécriture conseillé par Olivier pour OVH en haut du fichier .htaccess.
RewriteEngine on
RewriteCond %{SERVER_PORT} 80....etc..etc...

Sinon, le site semble bien être redirigé en https à l'affichage dans la barre d'adresse, mais les deux versions sont quand même trouvé.

mlescaudron

Excellent article, marrant qu'il soit partagé sous Linkedin aujourd'hui ^^.

Sous Nginx
server {
listen 80;
server_name example.com;
rewrite ^(.*) https://$host$1 permanent;
}

server {
listen 443;
...

David

@olivier: Effectivement le env=HTTPS devrait être facultatif. Comme je combine avec la redirection 301, les gens se voient redirigés en https et ont donc quand même cette entête, mais sans env=HTTPS ça veut dire que l'entête est envoyée même en HTTP (entête qui dit donc au browser d'interdire d'accéder au site en HTTP) et donc pourrait suffir même sans redirection 301 pour se retrouver en HTTPS (mais je n'ai pas testé et j'ai un peu peur que certains vieux browsers ne connaissent pas cette directive, il faut mieux laisser en plus la redirection 301).

Bref, ça effectue aussi en quelque sorte une "redirection", puisque ça force le https sur un domaine, même si la personne tape http ou que des liens http restent quelque part sur le site, et ce, en évitant l'aller-retour de la redirection 301 côté serveur puisque c'est le browser qui s'en charge, ce qui est un gain de performance et aussi un gain de sécurité car il n'est alors plus possible d'accéder à un http du domaine.
ATTENTION : du coup il faut être sûr qu'on n'a vraiment plus besoin d'http nulle part sur son domaine, et qu'on ne décide pas finalement d'annuler le https, et ce pour la durée indiquée du cache dans max-age, car repasser en http ne sera plus possible pour les visiteurs durant la durée du cache.

Aussi, cette ligne permet de passer de la note de A à A+ dans https://www.ssllabs.com/ssltest/

jey

Bjr.
Chez ovh dans le manager on peut gérer les redirections dans les options du domaine sans modifier le htaccess

rick38

Ne pas oublier :

Header set Strict-Transport-Security "max-age=31536000" env=HTTPS

Olivier Duffez

en effet rick38, mais cet article était surtout sur les redirections. Merci pour le commentaire
PS : à quoi sert env=HTTPS ? je ne le vois pas dans d'autres exemples/conseils sur HSTS

Christophe PIETUSZYNSKI

Bonjour,

Je me documente actuellement de façon un peu plus fine sur les redirections 301). Malgré quelques recherches sur Google je n'ai pas trouvé de réponse définitive à ces quelques interrogations :

1- Y a t'il une méthode à privilégier entre "configurer ses redirections sur le htaccess" ou "directement dans le virtualHost" ? Ou devrais je dire : Google préfère t'il une méthode à l'autre ?

2- Dans le cadre d'une redirection 301, est-il nécessaire de la laisser en place indéfiniment ou peut-on (après plusieurs semaines) la supprimer ? Si oui au bout de combien de temps (approximativement) ?

Merci par avance pour vos contributions.

Olivier Duffez

Si tu peux éviter de surcharger le .htaccess, c'est bien de les mettre dans le virtualhost (ça sera plus efficace en termes de charge serveur), mais ça ne change rien pour Google.
En théorie, il faut laisser la redirection aussi longtemps qu'il existe des liens vers la page redirigée, ou que des internautes l'ont mise en favoris : donc éternellement. En pratique si l'on souhaite alléger le nombre de redirections gérées par le serveur, s'il n'y a plus de backlink et que Google l'a désindexée depuis longtemps, on peut enlever la redirection.

Stephane

bonjour Kasutan,

j'ai déjà eu ce problème quand je suis passé à une configuration automatique des vhost dans apache. J'espère que depuis le temps tu as trouvé une solution...

La solution que j'ai trouvé est de rajouter la commande suivante au .htaccess

RewriteBase /

Kasutan

Lorsque j'ajoute les 3 lignes proposées au fichier .htaccess de mon site wordpress, les navigateurs m'affichent des messages d'erreur de type "trop de redirections sur cette page".
J'ai essayé à différents endroits du fichier .htaccess, sans succès.

En revanche, les instructions suivantes fonctionnent :

RewriteEngine On
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://www.yoursite.com/$1 [R,L]

(trouvé dans ce tutorial : http://www.wpbeginner.com/wp-tutorials/how-to-add-ssl-and-https-in-wordpress/comment-page-1/#comment-299884)

Zorg

Je ne comprends pas bien: "il est préférable de faire le redirect dans le virtualhost", ok mais dans l'exemple on renvoie TOUT vers la home du site ? (Redirect permanent / https://www.example.com/)

Du coup on perd le redirect 301 pour indiquer la nouvelle adresse de chaque url, c'est pas top non ?

Olivier Duffez

Non Zorg, si on prend la commande suivante :
Redirect permanent /blog/ https://www.example.com/

toute URI commençant par /blog/ va être redirigée en 301 vers l'URL consituée de https://www.example.com/ auquel on ajoute ce qu'il y avait dans l'URL de départ après /blog/

donc dans l'exemple indiqué, toutes les URL seront correctement redirigées

totor

Nginx = 20 % des serveurs ! On zappe ?

Olivier Duffez

si quelqu'un connait la façon de faire sur un serveur Nginx, je suis preneur, je mettrai à jour mon article

Olivier Duffez

Merci joey, tu as raison et j'ai mis à jour mon article.

joey

Il y a beaucoup plus simple :
Redirect permanent / https://LE_NOUVEAU_DOMAINE/

C'est d'ailleurs ce qui est conseillé dans la documentation d'Apache :
http://httpd.apache.org/docs/2.4/fr/rewrite/remapping.html#canonicalhost

Oups, j'ai interrompu la lecture après avoir lu les exemples et je viens de voir qu'il y a la même technique dans les Remarques importantes.
Du coup je ne comprend pas trop pourquoi c'est la méthode avec mod_rewrite qui a été présentée, mais bon... au moins c'était mentionné dans l'article. Même, si, encore une fois...
http://httpd.apache.org/docs/current/fr/rewrite/avoid.html

denisfr

ne pas oublier la redirection http://example.com vers https://www.example.com aussi.
Je viens de migrer un site de moyenne importance (1000/1500 visiteurs par jour).
Normalement, chute au départ de la fréquentation, perte de certaines places sur des mots clés mais tout devrait revenir dans l'ordre.

Les commentaires sont fermés