.htaccess: перенаправление на https без www приводит к циклу

я пытаюсь перенаправить мои URL-адреса на https. Я хотел бы сделать следующее:

http://example.com => https://example.com
http://www.example.com => https://example.com
www.example.com => https://example.com
example.com => https://example.com

Так что конвертируйте каждый URL в https://example.com (С удалением www)!

Мой текущий .htaccess выглядит так:

RewriteEngine On
RewriteBase /

RewriteCond %{HTTP_HOST} !^example.com [NC]
RewriteRule ^(.*)$ https://example.com /$1 [R=301,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !(\.gif|\.jpg|\.png|\.ogg|\.wav|\.mp3|\.mp4|\.zip|\.pdf|\.fav|\.rar|\.doc)$ [NC]
RewriteRule ^(.*)$ /index.php?q=$1 [L,QSA]

Я пытался добавить

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

после и до первого RewriteRule, но это приводит к бесконечному циклу.
Кто-нибудь может мне помочь?

1

Решение

Измените свое первое правило на это:

# remove www and turn on https in same rule
RewriteCond %{HTTP_HOST} ^www\. [NC,OR]
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)$ [NC]
RewriteRule ^ https://%1%{REQUEST_URI} [R=301,L,NE]

И очистите кеш браузера перед тестированием.

1

Другие решения

я нашел свое решение здесь:

https://serverfault.com/questions/677560/redirect-loop-when-forcing-https/678402#678402?newreg=f6df6f796eb343a5bbbe1da54c51f93b

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

По вопросам рекламы [email protected]