redirection htaccess vers https://www

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 veux que mon site soit redirigé vers https://www. avec HTTPS, et l'application du sous-domaine www. , mais quand j'accède à http://www. (sans HTTPS), il ne me redirige pas vers https://www avec HTTPS.

247
demandé sur Michael Berkowski 2012-12-20 21:58:52

12 réponses

pour tout d'abord forcer HTTPS, vous devez vérifier la variable d'environnement correcte %{HTTPS} off , mais votre règle ci-dessus prépare alors la www. puisque vous avez une deuxième règle pour appliquer www. , ne l'utilisez pas dans la première règle.

RewriteEngine On
RewriteCond %{HTTPS} off
# First rewrite to HTTPS:
# Don't put www. here. If it is already there it will be included, if not
# the subsequent rule will catch it.
RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
# Now, rewrite any request to the wrong domain to use www.
# [NC] is a case-insensitive match
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule .* https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

à propos de la proxy

lorsque derrière certaines formes de proxy, par lequel le client se connecte via HTTPS à un mandataire, équilibreur de charge, Application passager, etc., la variable %{HTTPS} peut ne jamais être on et provoquer une boucle de réécriture. Cela est dû au fait que votre application reçoit en fait du trafic HTTP même si le client et le répartiteur proxy/load utilisent HTTPS. Dans ces cas, cochez l'en-tête X-Forwarded-Proto au lieu de la variable %{HTTPS} . cette réponse montre le processus approprié

523
répondu Michael Berkowski 2018-04-02 20:32:38

Michals answer a travaillé pour moi, mais avec une petite modification:

problème:

lorsque vous avez un certificat de sécurité de site unique , un navigateur qui tente d'accéder à votre page sans https:// www. (ou quel que soit le domaine couvert par votre certificat) affichera un écran d'avertissement rouge laid avant il obtient même de recevoir la redirection vers la page https sûre et correcte.

Solution

utilisez D'abord la redirection vers le www (ou n'importe quel domaine couvert par votre certificat) et ensuite seulement la redirection https. Cela permettra d'assurer que vos utilisateurs ne sont pas confronté à une erreur parce que votre navigateur voit un certificat qui ne couvre pas l'url actuelle.

#First rewrite any request to the wrong domain to use the correct one (here www.)
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

#Now, rewrite to HTTPS:
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
132
répondu Larzan 2014-03-18 10:36:05

si vous utilisez CloudFlare ou un CDN similaire, vous obtiendrez une erreur de boucle infinie avec les solutions %{HTTPS} fournies ici. Si vous utilisez CloudFlare, vous devez utiliser ceci:

RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} =http
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
89
répondu Andrew 2014-11-13 23:30:44

MAUVAISE SOLUTION ET POURQUOI!

lorsque vous utilisez le code de la réponse acceptée:

RewriteCond %{HTTPS} off
RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule .* https://www.example.com%{REQUEST_URI} [L,R=301]

navigateur va à:

http://example.com

puis redirige vers:

https://example.com

puis redirige vers:

https://www.example.com

C'est trop demande sur le serveur


LA MEILLEURE SOLUTION ET LA RÉPONSE

ce code a une condition [OR] pour éviter les doubles changements à l'url!

RewriteEngine on
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule (.*) https://www.example.com%{REQUEST_URI} [R=301,L]

la plupart des réponses ont même accepté une, n'utilisez pas cette astuce.

34
répondu Amir Forsati 2018-09-27 08:46:37

Il y a beaucoup de solutions là-bas. Voici un lien vers l'apache wiki qui traite directement de cette question.

http://wiki.apache.org/httpd/RewriteHTTPToHTTPS

RewriteEngine On
# This will enable the Rewrite capabilities

RewriteCond %{HTTPS} !=on
# This checks to make sure the connection is not already HTTPS

RewriteRule ^/?(.*) https://%{SERVER_NAME}/ [R,L]
# This rule will redirect users from their original location, to the same location but using HTTPS.
# i.e.  http://www.example.com/foo/ to https://www.example.com/foo/
# The leading slash is made optional so that this will work either in httpd.conf
# or .htaccess context
23
répondu Vynz 2014-05-23 07:47:33

C'est le meilleur moyen que j'ai trouvé pour Proxy et pas de proxy utilisateurs

RewriteEngine On

### START WWW & HTTPS

# ensure www.
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^ https://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

# ensure https
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

### END WWW & HTTPS
23
répondu llioor 2016-09-09 16:09:30

rediriger http:// ou https:// à https://www vous pouvez utiliser la règle suivante sur toutes les versions d'apache :

RewriteEngine on

RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^ https://www.example.com%{REQUEST_URI} [NE,L,R]

Apache 2.4

RewriteEngine on

RewriteCond %{REQUEST_SCHEME} http [OR]
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^ https://www.example.com%{REQUEST_URI} [NE,L,R]

notez que la variable %{REQUEST_SCHEME} est disponible depuis apache 2.4 .

9
répondu starkeen 2016-06-28 16:52:48

Si vous êtes sur CloudFlare, assurez-vous d'utiliser quelque chose comme cela.

# BEGIN SSL Redirect
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} =http
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
</IfModule>
# END SSL Redirect

cela vous sauvera de la boucle de redirection et redirigera votre site vers SSL en toute sécurité.

P. S. c'est une bonne idée de vérifier le mod_rewrite.c!

8
répondu Ahmad Awais 2016-07-10 04:52:41

dans votre .fichier htaccess

RewriteEngine On
RewriteCond %{HTTP_HOST} !^www.
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}/ [R=301,L]
RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
0
répondu Adam Kozlowski 2017-07-25 14:17:22

j'essaie d'abord la réponse et il ne marche pas... Ce travail:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /

RewriteCond %{ENV:HTTPS} !=on
RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI} [R,L]

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

# END WordPress
0
répondu Jackssn 2018-08-30 14:45:25
RewriteEngine On
RewriteCond %{HTTP_HOST} !^www.
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}/ [R=301,L]

Notes: assurez-vous que vous avez fait les étapes suivantes""

  1. sudo a2enmod rewrite
  2. sudo service apache2 restart
  3. ajouter ce qui suit dans votre fichier vhost, situé à /etc/apache2/sites-available/000-default.conf
<Directory /var/www/html>
  Options Indexes FollowSymLinks MultiViews
  AllowOverride All
  Order allow,deny
  allow from all
  Require all granted
</Directory>

maintenant votre .htaccess va travailler et votre site redirigera vers http: / / https://www

0
répondu Kundan roy 2018-09-07 21:48:37

cela fonctionnera à la fois pour https et www

RewriteCond %{HTTPS} !=on
# This checks to make sure the connection is not already HTTPS
RewriteRule ^/?(.*) https://%{HTTP_HOST}%{REQUEST_URI} [R,L]
-2
répondu Nadeem As 2015-05-20 16:14:49