Это не ответ на ваш вопрос напрямую, но я чувствую, что ставлю его как ответ (плюс он слишком велик, чтобы оставлять его в качестве комментария).
Мой совет: пожалуйста, прекратите играть с htaccess для такого рода задач ( принудительное использование нескольких URL-адресов для использования HTTPS и принудительное остальных для использования HTTP).
Лучший способ - создать полные URL для всех ссылок (страниц, а не ресурсов), , где URL включает имя домена и протокол . В этом случае все URL будут иметь правильный протокол (HTTP / HTTPS) сразу. Конечно, вы все еще можете исправить (301 или 302 перенаправление) запросы к предполагаемому быть https, если они (по какой-то странной причине) запрашиваются через HTTP. Вот где .htaccess можно безопасно и легко использовать.
Если пользователь будет запрашивать обычную страницу (должна обслуживаться по HTTP) через HTTPS - тогда позвольте ему сделать это - в этом нет ничего плохого. Да - HTTPS требует немного больше ресурсов на стороне сервера, но если вы сгенерируете все ссылки таким образом, таких ситуаций практически не будет, если только пользователь специально не изменит протокол. Даже если такая одна страница будет обслуживаться по HTTPS, следующая «обычная» ссылка, по которой он щелкнет, будет HTTP - 1 дополнительный просмотр страницы на основе HTTPS не убьет ваш сервер.
Я использую этот подход все время, когда сайт имеет безопасную область ... и на основании журналов у нас менее 0,01% ВСЕХ просмотров страниц, которые были просмотрены / попытались просмотреть по «неправильному» протоколу - - Подавляющее большинство из них были боты или попытки взлома / поиска уязвимостей.
Основываясь на такой статистике, я бы сказал - она отлично работает. да - вам нужно немного изменить свой код / шаблоны, чтобы реализовать это ... но это намного лучше, чем возиться с этим. htaccess и mod_rewrite.
В любом случае, вот правила, которые сделают эту работу за вас:
# force https for all URLs in /checkout
RewriteCond %{HTTPS} =off
RewriteRule ^checkout https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
# don't do anything for images/css/js
RewriteRule \.(gif|jpe?g|png|css|js)$ - [NC,L]
# force http for all other URLs that are not in /checkout
RewriteCond %{HTTPS} =on
RewriteCond %{REQUEST_URI} !^/(checkout|index.php/checkout)
RewriteRule .* http://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
# your other rules here, e.g.:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php/$1 [L]
OR
# force https for all URLs in /checkout
RewriteCond %{HTTPS} =off
RewriteRule ^checkout https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
# do not do anything for already existing files
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule .+ - [L]
# force http for all other URLs that are not in /checkout
RewriteCond %{HTTPS} =on
RewriteCond %{REQUEST_URI} !^/checkout
RewriteRule .* http://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
# your other rules here, e.g.:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php/$1 [L]