J'ai le code htaccess suivant:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond !{HTTPS} off
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
</IfModule>
Je souhaite que mon site soit redirigé vers https://www.
avec HTTPS et applique le www.
sous - domaine, mais lorsque j'accède http://www.
(sans HTTPS), il ne me redirige pas vers https://www
avec HTTPS.
RewriteCond %{HTTPS} =off
Réponses:
Pour forcer HTTPS en premier, vous devez vérifier la variable d'environnement correcte
%{HTTPS} off
, mais votre règle ci-dessus ajoute ensuite lewww.
Puisqu'il y a une deuxième règle à appliquerwww.
, ne l'utilisez pas dans la première règle.À propos du mandataire
Lorsqu'il se trouve derrière certaines formes de proxy, où le client se connecte via HTTPS à un proxy, un équilibreur de charge, une application Passenger, etc., la
%{HTTPS}
variable peut ne jamais l'êtreon
et provoquer une boucle de réécriture. En effet, votre application reçoit en fait du trafic HTTP ordinaire même si le client et le proxy / équilibreur de charge utilisent HTTPS. Dans ces cas, vérifiez l'en-X-Forwarded-Proto
tête au lieu de la%{HTTPS}
variable. Cette réponse montre le processus appropriéla source
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
une URL comme exaple.com/?bla=%20 est devenue exaple.com/?bla=%2520 , c'est-à-dire que le signe de pourcentage a été encodé. Pensez à utiliser le drapeauNE
pour éviter le double encodage:RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [NE,L,R=301]
X-Forwarded-Proto
tête pour vérifier HTTPS au lieu de la%{HTTPS}
variable. Vous n'avez pas dit quelle partie provoque la boucle, lawww
ou la partie HTTPS, mais c'est la première chose qui me vient à l'esprit.http://example.com
(c'est-à-dire HTTP et non www), vous obtiendrez une double redirection. D'abord àhttps://example.com
(la première règle) puis àhttps://www.example.com
(la deuxième règle). Vous pouvez résoudre ce problème en inversant simplement ces deux règles, car les deux règles redirigent indépendamment vers HTTPS.La réponse de Michals a fonctionné pour moi, mais avec une petite modification:
Problème:
lorsque vous avez un certificat de sécurité de site unique , un navigateur qui essaie d'accéder à votre page sans https: // www. (ou quel que soit le domaine couvert par votre certificat) affichera un laid écran d'avertissement rouge avant même qu'il ne reçoive la redirection vers la page https sûre et correcte.
Solution
Utilisez d'abord la redirection vers le www (ou quel que soit le domaine couvert par votre certificat) et ensuite seulement la redirection https. Cela garantira que vos utilisateurs ne seront confrontés à aucune erreur car votre navigateur voit un certificat qui ne couvre pas l'URL actuelle.
la source
https://example.com
, mais à mon avis, c'est le format le moins susceptible d'être tapé par un utilisateur. (La réponse acceptée aura également le même problème)https://
sanswww
tout en ayant un certificat uniquement sur lewww
, ajoutez simplement cette règle à la solution:RewriteCond %{HTTP_HOST} !^www\. RewriteCond %{HTTPS} on RewriteRule ^(.*)$ http://www.%{HTTP_HOST}%{REQUEST_URI}[L,R=301]
elle revient simplement àhttp
lorsque vous essayez de vous connecterhttps://example.com
pour éviter une erreur de certificat.http://example.com
(c.-à-d. HTTP et pas www)Si vous utilisez CloudFlare ou un CDN similaire, vous obtiendrez une erreur de boucle infinie avec les solutions% {HTTPS} fournies ici. Si vous êtes un utilisateur CloudFlare, vous devrez utiliser ceci:
la source
=http
à!=https
nos environnements.X-Forwarded-Proto
l'en-tête n'a pas été déclaré si http, de même!=https
que l'astuce.{HTTPS}
ne fonctionnait pas. J'ai essayé{ENV:HTTPS}
et même{SERVER_PORT} 443
, mais à la fin, c'était parce que je devais vérifier les en-têtes de requête HTTP personnalisés de Cloudflare.MAUVAISE SOLUTION ET POURQUOI!
N'utilisez jamais la solution ci-dessous car lorsque vous utilisez leur code, c'est quelque chose comme:
Le navigateur va à:
Redirige ensuite vers:
Redirige ensuite vers:
C'est trop demander au serveur.
La plupart des réponses, même acceptées, ont un problème.
MEILLEURE SOLUTION ET LA RÉPONSE
Ce code a une
[OR]
condition pour empêcher les doubles modifications à l'URL!la source
RewriteEngine On RewriteCond %{HTTPS} off RewriteCond %{HTTP_HOST} !^www\. [NC] RewriteRule .* https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301] RewriteCond %{HTTPS} off RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
wp-content/cache/page_enhanced/
et ainsi de suite. Comment puis-je réparer cela? Edit: On dirait que je dois le mettre en haut de.htaccess
. Merci pour le script :)C'est le meilleur moyen que j'ai trouvé pour les utilisateurs proxy et non proxy
la source
Il existe de nombreuses solutions. Voici un lien vers le wiki apache qui traite directement de ce problème.
http://wiki.apache.org/httpd/RewriteHTTPToHTTPS
la source
RewriteCond %{HTTPS} off
deRewriteCond %{HTTPS} !=on
cette redirection serait toujours le cas, cela semble la meilleure réponse à moi.Pour rediriger http: // ou https: // vers https: // www, vous pouvez utiliser la règle suivante sur toutes les versions d'apache:
Apache 2.4
Notez que la variable% {REQUEST_SCHEME} est disponible depuis Apache 2.4 .
la source
Si vous êtes sur CloudFlare, assurez-vous d'utiliser quelque chose comme ça.
Cela vous sauvera de la boucle de redirection et redirigera votre site vers SSL en toute sécurité.
PS C'est une bonne idée de vérifier le mod_rewrite.c!
la source
la source
Remarques: assurez-vous d'avoir effectué les étapes suivantes
Maintenant, votre .htaccess fonctionnera et votre site sera redirigé vers http: // vers https: // www
la source
Similaire à la solution de redirection htaccess d'Amir Forsati vers https: // www mais pour un nom de domaine variable, je suggère:
la source
À définir dans votre fichier .htaccess
la source
J'ai utilisé le code ci-dessous de ce site Web, il fonctionne très bien https://www.freecodecamp.org/news/how-to-redirect-http-to-https-using-htaccess/
J'espère que ça aide
la source
J'essaie la première réponse et ça ne marche pas ... Ce travail:
la source