Хорошо, у меня есть этот код:
RewriteCond %{HTTPS} off
RewriteCond %{REQUEST_URI} ^/borrowing/ill/request\.php$
RewriteRule ^.*$ https://%{HTTP_HOST}%{REQUEST_URI} [R,L]
Я ожидал, что это сработает:
На самом деле это работает так:
И так далее.
Я знаю, что второе условие (соответствие имени файла) работает, потому что цикл перенаправления попадает только на эту конкретную страницу. Вопрос в том, почему переключение на 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]