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

Принудительно использовать SSL на одной странице через .htaccess без зацикливания

Хорошо, у меня есть этот код:

RewriteCond %{HTTPS} off
RewriteCond %{REQUEST_URI} ^/borrowing/ill/request\.php$
RewriteRule ^.*$ https://%{HTTP_HOST}%{REQUEST_URI} [R,L]

Я ожидал, что это сработает:

  1. Запрос на /borrowing/ill/request.php поступает по HTTP.
  2. Правило соответствует.
  3. Сервер перенаправляет на HTTPS.
  4. Правило не соответствует, потому что HTTPS сейчас включен.

На самом деле это работает так:

  1. Запрос на /borrowing/ill/request.php поступает по HTTP.
  2. Правило соответствует.
  3. Сервер перенаправляется на HTTPS.
  4. Правило соответствует.
  5. Сервер перенаправляется на HTTPS.
  6. Правило соответствует.
  7. Сервер перенаправляет на HTTPS ...

И так далее.

Я знаю, что второе условие (соответствие имени файла) работает, потому что цикл перенаправления попадает только на эту конкретную страницу. Вопрос в том, почему переключение на HTTPS не приводит к несоответствию первого условия?

РЕДАКТИРОВАТЬ:

Я поместил те же самые правила .htaccess в тестовую область на другом сервере - тот же файл и информацию о пути. И они работали просто хорошо. Должно быть что-то не так с конфигурацией сервера где-то еще.

Оказывается, в приведенном выше коде нет ничего плохого. Проблема в том, что сервер, на котором я его выполнял, разговаривает с балансировщиком нагрузки, который общается только через порт 80.

Итак, запрос HTTPS поступает на порт 443, попадает в балансировщик нагрузки, который перенаправляет его на порт 80. Затем веб-сервер перенаправляет его обратно на 443, который перенаправляется на 80, на 443, на 80, на 443 ...

Итак, исправление состоит в том, чтобы сообщить об этом человеку, обслуживающему балансировщик нагрузки, и надеяться, что он сможет это выяснить.

В любом случае спасибо за помощь, вы все были очень терпеливы.

Если целевой домен известен, попробуйте следующее:

RewriteCond %{SERVER_PORT} !^443$
RewriteCond %{REQUEST_URI} ^/borrowing/ill/request\.php$
RewriteRule ^(.*)$ https://www.example.com/$1 [R,L]