Чтобы первыми заставить HTTPS, вы должны проверить правильную переменную среды %{HTTPS} off
, но ваше правило выше, затем добавляет www.
. Поскольку у вас есть второе правило для принудительного использования www.
, не используйте его в первом правиле .
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]
Когда за некоторыми формами проксирования, посредством чего клиент подключается через HTTPS к прокси, балансировщику нагрузки, приложению Пассажира и т. д., %{HTTPS}
может никогда не быть on
и вызвать цикл перезаписи. Это связано с тем, что ваше приложение фактически получает простой HTTP-трафик, даже если клиент и балансировщик прокси / нагрузки используют HTTPS. В этих случаях проверьте X-Forwarded-Proto
заголовок вместо переменной %{HTTPS}
. В этом ответе показан соответствующий процесс