Comment puis-je forcer à SSL / https en utilisant la page .htaccess et mod_rewrite spécifique à PHP.
Pour Apache, vous pouvez utiliser mod_ssl
pour forcer SSL avec SSLRequireSSL Directive
:
Cette directive interdit l'accès à moins que HTTP sur SSL (c'est-à-dire HTTPS) soit activé pour la connexion actuelle. C'est très pratique à l'intérieur de l'hôte virtuel ou des répertoires compatibles SSL pour se défendre contre les erreurs de configuration qui exposent des éléments qui doivent être protégés. Lorsque cette directive est présente, toutes les demandes refusées n'utilisant pas SSL.
Cependant, cela ne fera pas de redirection vers https. Pour rediriger, essayez ce qui suit avec mod_rewrite
dans votre fichier .htaccess
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
ou l'une des différentes approches données à
Vous pouvez également résoudre ce problème à partir de PHP au cas où votre fournisseur aurait désactivé .htaccess (ce qui est peu probable depuis que vous l'avez demandé, mais de toute façon)
if (!isset($_SERVER['HTTPS']) || $_SERVER['HTTPS'] !== 'on') {
if(!headers_sent()) {
header("Status: 301 Moved Permanently");
header(sprintf(
'Location: https://%s%s',
$_SERVER['HTTP_HOST'],
$_SERVER['REQUEST_URI']
));
exit();
}
}
%{HTTP:X-Forwarded-Proto}
ou%{HTTP:X-Real-Port}
pour vérifier si SSL est activé.RewriteRule <input-pattern> <output-url>
. Ainsi, l'espace doit être là, et le single^
dit simplement "correspondre à toutes les URL d'entrée".J'ai trouvé une
mod_rewrite
solution qui fonctionne bien pour les serveurs proxy et non proxy.Si vous utilisez CloudFlare, AWS Elastic Load Balancing, Heroku, OpenShift ou toute autre solution Cloud / PaaS et que vous rencontrez des boucles de redirection avec des redirections HTTPS normales, essayez plutôt l'extrait de code suivant.
la source
Solution PHP
En empruntant directement à la réponse très complète de Gordon, je note que votre question mentionne être spécifique à la page pour forcer les connexions HTTPS / SSL.
Ensuite, aussi près du haut de ces pages que vous souhaitez forcer à se connecter via PHP, vous pouvez
require()
un fichier centralisé contenant cette (et toute autre) fonctions personnalisées, puis exécutez simplement laforceHTTPS()
fonction.Solution HTACCESS / mod_rewrite
Je n'ai pas implémenté ce type de solution personnellement (j'ai eu tendance à utiliser la solution PHP, comme celle ci-dessus, pour sa simplicité), mais ce qui suit peut être, au moins, un bon début.
la source
RewriteCond %{REQUEST_METHOD} !^POST$
?RewriteCond %{REQUEST_METHOD} !^POST$
devrait empêcher les soumissions POST d'être affectées par ces redirections.Solution basée sur la réécriture de modules:
L'utilisation du code suivant dans htaccess transfère automatiquement toutes les requêtes http à https.
Cela redirigera vos demandes non www et www http vers www version de https.
Une autre solution (Apache 2.4 *)
Cela ne fonctionne pas sur les versions inférieures d'apache car la variable% {REQUEST_SCHEME} a été ajoutée à mod-rewrite depuis 2.4.
la source
Je voudrais juste souligner qu'Apache a les pires règles d'héritage lors de l'utilisation de plusieurs fichiers .htaccess à travers les profondeurs de répertoire. Deux pièges clés:
RewriteOptions InheritDownBefore
directive (ou similaire) pour changer cela. (voir question)Cela signifie que la solution globale suggérée sur le wiki Apache ne fonctionne pas si vous utilisez d'autres fichiers .htaccess dans les sous-répertoires. J'ai écrit une version modifiée qui fait:
la source
Simple et facile, ajoutez simplement le suivant
la source
Ce code fonctionne pour moi
la source
Simple:
remplacez votre URL par example.com
la source
pour forcer simplement SSL avec Apache .htaccess, vous pouvez utiliser
pour rediriger la réponse ci-dessus est correcte
la source
essayez ce code, il fonctionnera pour toutes les versions d'URL comme
http://www.website.com
la source