Назад | Перейти на главную страницу

перенаправить http на https с помощью .htaccess не удалось

У меня есть веб-сайт, на котором используется гибкий SLL CloudFlare, размещенный на HostGator.

Я хочу перенаправить все HTTP-запросы к соответствующему URL-адресу HTTPS. Без исключений. Я собираюсь поставить правило наверху L, поэтому после обработки все следующие правила перезаписи не должны проверяться.

Мой текущий код таков:

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R,L]

Но это приводит к бесконечным перенаправлениям на версию HTTPS. Вот HTTP-заголовки FireFox Live:

https://example.net/

GET / HTTP / 1.1
Хост: example.net
Пользователь-агент: Mozilla / 5.0 (Windows NT 10.0; WOW64; rv: 51.0) Gecko / 20100101 Firefox / 51.0
Принять: текст / html, приложение / xhtml + xml, приложение / xml; q = 0,9,/; q = 0,8
Принять-язык: da, en-US; q = 0,7, en; q = 0,3
Принять-кодирование: gzip, deflate, br
DNT: 1
Подключение: сохранить жизнь
Небезопасные запросы на обновление: 1

HTTP / 2.0 301 перемещен навсегда
Дата: Ср, 15 фев 2017 15:20:35 GMT
Тип содержимого: текст / html; кодировка = iso-8859-1
Установить-Cookie: __cfduid = d07edac1644bccce1642d2c845767f9951487172035; expires = Thu, 15-Feb-18 15:20:35 GMT; путь = /; домен = .example.net; HttpOnly
Расположение: https://example.net/
Сервер: Cloudflare-Nginx
cf-луч: 3319bea4dd2f3cfb-CPH
X-Firefox-Spdy: h2


http://ocsp.digicert.com/

POST / HTTP / 1.1
Хост: ocsp.digicert.com
Пользователь-агент: Mozilla / 5.0 (Windows NT 10.0; WOW64; rv: 51.0) Gecko / 20100101 Firefox / 51.0
Принять: текст / html, приложение / xhtml + xml, приложение / xml; q = 0,9,/; q = 0,8
Принять-язык: da, en-US; q = 0,7, en; q = 0,3
Принять-кодирование: gzip, спустить
Content-Length: 83
Тип содержимого: приложение / ocsp-запрос
DNT: 1
Подключение: keep-alive 0Q0O0M0K0I0 +

HTTP / 1.1 200 ОК
Допустимые диапазоны: байты
Кэш-контроль: общедоступный, max-age = 172800
Тип содержимого: приложение / ocsp-ответ
Дата: Ср, 15 фев 2017 15:20:35 GMT
Etag: "58a44f61-1d7"
Срок действия истекает: Ср, 22 фев 2017 03:20:35 GMT
Последнее изменение: Ср, 15 фев 2017 12:53:53 GMT
Сервер: ECS (arn / 459D)
X-Cache: УДАРИТЬ
Content-Length: 471


https://example.net/

GET / HTTP / 1.1
Хост: example.net
Пользователь-агент: Mozilla / 5.0 (Windows NT 10.0; WOW64; rv: 51.0) Gecko / 20100101 Firefox / 51.0
Принять: текст / html, приложение / xhtml + xml, приложение / xml; q = 0,9,/; q = 0,8
Принять-язык: da, en-US; q = 0,7, en; q = 0,3
Принять-кодирование: gzip, deflate, br
Cookie: __cfduid = d07edac1644bccce1642d2c845767f9951487172035
DNT: 1
Подключение: сохранить жизнь
Небезопасные запросы на обновление: 1

HTTP / 2.0 301 перемещен навсегда
Дата: Ср, 15 фев 2017 15:20:35 GMT
Тип содержимого: текст / html; кодировка = iso-8859-1
Расположение: https://example.net/
Сервер: Cloudflare-Nginx
cf-ray: 3319bea7ddfb3cfb-CPH
X-Firefox-Spdy: h2


https://example.net/

GET / HTTP / 1.1
Хост: example.net
Пользователь-агент: Mozilla / 5.0 (Windows NT 10.0; WOW64; rv: 51.0) Gecko / 20100101 Firefox / 51.0
Принять: текст / html, приложение / xhtml + xml, приложение / xml; q = 0,9,/; q = 0,8
Принять-язык: da, en-US; q = 0,7, en; q = 0,3
Принять-кодирование: gzip, deflate, br
Cookie: __cfduid = d07edac1644bccce1642d2c845767f9951487172035
DNT: 1
Подключение: сохранить жизнь
Небезопасные запросы на обновление: 1

HTTP / 2.0 301 перемещен навсегда
Дата: Ср, 15 фев 2017 15:20:36 GMT
Тип содержимого: текст / html; кодировка = iso-8859-1
Расположение: https://example.net/
Сервер: Cloudflare-Nginx
cf-ray: 3319beaaae7e3cfb-CPH
X-Firefox-Spdy: h2

Я встречал и другие подобные вопросы, но большинство предлагаемых решений представляют собой вариации того, что я использую в настоящее время, и я пробовал их (но, пожалуйста, не стесняйтесь рекомендовать то, что сработало для вас, и я попробую).

Cloudflare Гибкий SSL: безопасное соединение между вашим посетителем и CloudFlare, но нет безопасного соединения между CloudFlare и вашим веб-сервером. Вам не нужно иметь сертификат SSL на вашем веб-сервере, но ваши посетители по-прежнему видят, что на сайте включен HTTPS. Источник

Поскольку вы перенаправляете на HTTPS со своего сервера, а не с помощью правила страницы Cloudflare, даже запросы HTTPS со стороны клиента по-прежнему всегда будут запускать правило перенаправления.

1. Client ---> HTTP ----> Cloudflare CDN ----> HTTP ----> Your server
                                                                 | 
                         <-------  Response: Redirect to HTTPS <- 

2. Client ---> HTTPS ----> Cloudflare CDN ----> HTTP ----> Your server
                                                                 | 
                         <-------  Response: Redirect to HTTPS <-

3. Client ---> HTTPS ----> Cloudflare CDN ----> HTTP ----> Your server
                                                                 | 
                         <-------  Response: Redirect to HTTPS <-

Cloudflare не передает HTTPS вашему веб-серверу, и это создает цикл бесконечного перенаправления.

Чтобы решить эту проблему, вам необходимо удалить перенаправление из файла .htaccess и вместо этого настроить правило страницы Cloudflare.

RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301,NE]

Частично взято из: https://stackoverflow.com/a/26623196/2774776