В сети можно найти множество советов добавить в файлик .htaccess строки вида:
RewriteEngine On RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https://www.yourdomain.com/$1 [R,L]
и, якобы пользователь зашедший на сайт по http будет автоматом перекидываться на защищенную SSL-ем версию сайта.
Но на практике это все выливается в бесконечный редирект всех посетителей (и http и https) на всех страницах.
Почему так происходит?
В сообществе системный администраторов ставить «голый» Apache наружу считается моветоном, и на то есть ряд причин. Пока, просто скажу, что это огромная дырень в безопасности. Перед ним практически всегда ставится кеширующий прокси (например, Nginx, или Varnish), раздающий статический контент (картинки, css и прочую дребедень). Он же (а не Apache) и занимается обработкой SSL (SSL termination proxy). Таким, образом, получается, что запрос шифруется на стороне клиента, отправляется по https на сервер, расшифровывается прокси, и, в расшифрованном виде, по http передается Apache. То есть апачу, вне зависимости от того, какой протокол используется, поступает запрос по http, который он, согласно правилам в .htaccess пытается перекинуть на https и так до бесконечности.
Почему нельзя включить обработку SSL на стороне Apache, а не прокси?
Вспомним сетевую модель OSI. Нас интересуют только последние три уровня:
5. Транспортный (TCP, UDP);
6. Представления (SSL, TLS);
7. Прикладной (HTTP, SMTP, IMAP и др.).
То есть, SSL (а если быть точным, то TLS) обеспечивает защищенную среду передачи данных в рамках сессии TCP. При заходе на сайт эта самая сессия устанавливается не между клиентом и Apache, а между клиентом и прокси, который, в свою очередь, устанавливает TCP сессию между собой и Apache. То есть фактически, при этом устанавливаются две последовательные сессии и SSL защищает первую из них. Последняя остается на усмотрение админа.
И как теперь быть? Куда ставить SSL и где делать перенаправление?
Очевидный ответ — в конфиг прокси (Nginx или Varnish).
Хуйня этот .htaccess короче, лучше все дериктивы прописывать в конфигах для каждого сайта, потому что сам .htaccess это дыра в безопасности.