web-dev-qa-db-fra.com

Comment puis-je servir toutes les ressources sous HTTPS au lieu de HTTP sans changer leurs URL dans le code HTML

Je sais qu’en utilisant un fichier .htaccess je peux rediriger tout le monde vers https://. Cependant, mon certificat SSL se plaint si tout le contenu n'est pas servi sous HTTPS.

Existe-t-il un moyen de convertir toutes les ressources à servir sous HTTPS sans modifier toutes les URL http:// en https:// dans le code HTML?

EXEMPLE: Si je tape http://domain.com, il ira à https://domain.com. Cependant, les images n'utilisent pas HTTPS, ce qui pose problème. Est-il possible de faire en sorte que TOUTES les ressources utilisent HTTPS?

J'ai ceci:

RewriteEngine On
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_Host} ^www.domain\.com$ [NC]
RewriteRule ^ https://domain.com%{REQUEST_URI} [L,R=301]

Cependant, mon certificat EV disparaîtra à cause d'un contenu non sécurisé. J'ai donc besoin que toutes les images soient également servies sous HTTPS.

5
Jason

Vous devez supprimer le préfixe 'http:' de tous les liens d’image (et de tout autre) de votre site. Lorsque vous le ferez, votre navigateur utilisera par défaut le protocole avec lequel la page se charge. Par exemple ceci est le meilleur:

<a href="//www.example.com/">

Et ce n'est pas:

<a href="http://www.example.com/">

Le meilleur exemple est un balisage parfaitement valide et vous chargerez toutes vos ressources via une connexion HTTPS avec la réécriture que vous utilisez déjà. Commencez à l’utiliser pour tous les liens car il fonctionne à la fois avec HTTP et HTTPS. Ainsi, vous ne rencontrerez plus jamais ce problème si vous activez ou désactivez SSL.

La seule considération est que vous utilisiez un CDN ou un autre contenu hébergé par un tiers sur votre site. Si vous l’êtes, les conseils ci-dessus ne fonctionneront que s’ils rendent leurs ressources disponibles via HTTPS également.

Une fois cette opération effectuée, votre certificat EV (validation étendue) fonctionnera comme prévu et toutes les ressources de la page se chargeront via une connexion sécurisée.

10
Tom Brossman

Comme solution rapide, vous pouvez demander au navigateur Web de réécrire toutes vos URL HTTP en tant que HTTPS en envoyant l'en-tête Content-Security-Policy: upgrade-insecure-requests; ou la balise méta <meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests"> à chaque page.

Ceci n'est pas destiné à être utilisé comme solution permanente, mais comme outil de transition jusqu'à ce que vous puissiez convertir toutes vos URL en https.

2