335 votes

Comment rediriger toutes les requêtes HTTP vers HTTPS ?

J'essaie de rediriger toutes les insécurités HTTP sur mon site (par exemple http://www.example.com ) à HTTPS ( https://www.example.com ). Comment puis-je faire cela dans .htaccess fichier ?

Au fait, j'utilise PHP .

1 votes

Vous pouvez (et devriez) le faire par l'intermédiaire de votre site Web. httpd mais pas avec PHP.

2 votes

@jnpcl, si je suis d'accord que la solution httpd est meilleure que la solution basée sur PHP, je ne pense pas qu'une redirection systématique soit une bonne pratique en général. Si vous voulez rediriger vos utilisateurs vers HTTPS à tout moment, envoyez-les là depuis le "point d'entrée" (le premier lien vers votre site), ne le faites pas à mi-chemin, ce qui pourrait entraîner la fuite de certaines données que vous pensiez protégées (si vous ne remarquez pas cette redirection instantanée).

0 votes

@Bruno : Je pensais plutôt à la duplication des requêtes http, à la possibilité de perdre des chaînes de requête et à la possibilité pour l'utilisateur de saisir manuellement les données suivantes http://

364voto

ssc Points 1813

Le site Documentation sur Apache recommande de ne pas utiliser une réécriture :

Pour rediriger http URLs pour https faites ce qui suit :

<VirtualHost *:80>
    ServerName www.example.com
    Redirect / https://www.example.com/
</VirtualHost>

<VirtualHost *:443>
    ServerName www.example.com
    # ... SSL configuration goes here
</VirtualHost>

Cet extrait doit être placé dans le fichier de configuration du serveur principal, pas en .htaccess comme demandé dans la question.

Cet article n'est peut-être apparu qu'après que la question ait été posée et qu'une réponse y ait été apportée, mais il semble que ce soit la voie à suivre actuellement.

13 votes

Où puis-je trouver le serveur principal ? fichier de configuration

0 votes

J'aime ne pas avoir à dupliquer l'enregistrement VirutalHost pour *:80 et *:443, Chrome est content avec un cadenas mais Firefox dit "Des parties de cette page ne sont pas sûres (comme les images). Comment corriger cela ? support.mozilla.org/fr/US/kb/mixed-content-blocking-firefox

343voto

Reese Moore Points 6213

Mise à jour : Bien que cette réponse ait été acceptée il y a quelques années, notez que son approche est maintenant recommandé contre par la documentation d'Apache. Utilisez un Redirect à la place. Voir cette réponse .


RewriteEngine On
RewriteCond %{HTTPS} !on
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}

1 votes

Pour les débutants, cela doit rediriger example.com , http://example.com à https://example.com et www.example.com , http://www.example.com à https://www.example.com - voir d'autres réponses pour enlever le www

4 votes

Votre formulation est une condamnation trop forte de cette réponse. Dans ce lien, Apache dit : "Si, pour quelque raison que ce soit, vous souhaitez toujours utiliser mod_rewrite ... que vous pourriez utiliser". Et bien sûr, si vous n'avez pas accès à la configuration du serveur (99% des utilisateurs), cette réponse est bonne.

37voto

Bruno Points 47560

Comme je le disais dans cette question Je vous suggère d'éviter de rediriger aveuglément toutes les requêtes HTTP vers leur équivalent HTTPS, car cela pourrait vous donner une fausse impression de sécurité. Au lieu de cela, vous devriez probablement rediriger la "racine" de votre site HTTP vers la racine de votre site HTTPS et créer des liens à partir de là, uniquement vers HTTPS.

Le problème est que si un lien ou un formulaire sur le site HTTPS fait que le client envoie une requête vers le site HTTP, son contenu sera visible, avant la redirection.

Par exemple, si l'une de vos pages servies par HTTPS comporte un formulaire qui dit <form action="http://example.com/doSomething"> et envoie certaines données qui ne devraient pas être envoyées en clair, le navigateur enverra d'abord la requête complète (y compris l'entité, s'il s'agit d'un POST) au site HTTP. La redirection sera envoyée immédiatement au navigateur et, comme un grand nombre d'utilisateurs désactivent ou ignorent les avertissements, il est probable qu'elle sera ignorée.

Bien sûr, l'erreur consistant à fournir les liens qui devraient mener au site HTTPS mais qui finissent par être destinés au site HTTP peut poser des problèmes dès que vous avez quelque chose qui écoute sur le port HTTP sur la même adresse IP que votre site HTTPS. Cependant, je pense que le fait de conserver les deux sites en tant que "miroir" ne fait qu'augmenter les risques d'erreurs, car vous pouvez avoir tendance à supposer qu'il se corrigera automatiquement en redirigeant l'utilisateur vers le site HTTPS, alors qu'il est souvent trop tard. (Des discussions similaires ont eu lieu dans cette question. )

15voto

GiorgosK Points 1

J'ai découvert que la meilleure façon d'utiliser https et www sur un domaine est la suivante

RewriteCond %{HTTPS} off 
RewriteCond %{HTTPS_HOST} !^www.example.com$ [NC]
RewriteRule ^(.*)$ https://www.example.com/$1 [L,R=301]

0 votes

Il n'y a pas HTTPS_HOST disponible dans Apache htaccess. Seulement HTTP_HOST peut être utilisé. Vous pouvez également ajouter [OR] à la fin de la première condition pour le rendre globalement plus flexible, car maintenant il ne pouvait rediriger que les requêtes non-ssl non-www.

2voto

Ajoutez le code suivant au fichier .htaccess :

Options +SymLinksIfOwnerMatch
RewriteEngine On
RewriteCond %{SERVER_PORT} !=443
RewriteRule ^ https://[your domain name]%{REQUEST_URI} [R,L]

Où [votre nom de domaine] est le nom de domaine de votre site web.

Vous pouvez également rediriger des dossiers spécifiques hors de votre nom de domaine en remplaçant la dernière ligne du code ci-dessus par :

RewriteRule ^ https://[your domain name]/[directory name]%{REQUEST_URI} [R,L]

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X