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.
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é
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]
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]
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.
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
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
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 .
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!
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]
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
RewriteEngine On
RewriteCond %{HTTP_HOST} !^www.
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}/ [R=301,L]
Notes: assurez-vous que vous avez fait les étapes suivantes""
- sudo a2enmod rewrite
- sudo service apache2 restart
- 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
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]