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 .
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 .
Le site Documentation sur Apache recommande de ne pas utiliser une réécriture :
Pour rediriger
http
URLs pourhttps
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.
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
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}
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
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.
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. )
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 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.
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://
0 votes
@jnpcl c'est un bon point en effet. Je suggérais simplement que, même si les gens ont tendance à demander ce genre de redirection pour améliorer la sécurité de leur site, souvent, cela ne l'améliore pas vraiment (puisque cela n'empêche pas la même requête de passer d'abord par le HTTP normal).
0 votes
Duplicata possible de Comment rediriger toutes les requêtes HTTP vers HTTPS ? , Forcer SSL/HTTPS avec Zend Framework et mod_rewrite , Forcer SSL et WWW dans .htaccess
11 votes
@outis : le premier lien que vous avez posté est ce question.