Я использовал следующие требовать раздел оформления заказа веб-сайта требует SSL:
<Directory "/var/www/html">
RewriteEngine on
Options +FollowSymLinks
Order allow,deny
Allow from all
RewriteCond %{SERVER_PORT} !^443$
RewriteRule \.(gif|jpg|jpeg|jpe|png|css|js)$ - [S=1]
RewriteRule ^checkout(.*)$ https://%{SERVER_NAME}%{REQUEST_URI} [L,R]
</Directory>
Так, например, попав http://www.example.com/checkout перенаправляет к https://www.example.com/checkout
Правило будет показывать расширения файлов, которые обычно включаются в страницу, чтобы вы не получали предупреждения о смешанном содержании. Вы должны добавить в этот список по мере необходимости.
Если вы хотите несколько страниц изменить RewriteRule на что-то вроде:
RewriteRule ^(checkout|login)(.*)$ https://%{SERVER_NAME}%{REQUEST_URI} [L,R]
Конечно, каталог должен соответствовать фактическому пути на сервере. Эта страница также может помочь с дополнительной информацией для ваших нужд: http://www.whoopis.com/howtos/apache-rewrite.html
Я использую это на веб-сайте, который запускает Plesk 8.6, но это не должно иметь значения. Это в моем файле vhost.conf, который похож на его в файле httpd.conf. Я не уверен, что вам нужно будет настроить что угодно, чтобы использовать его в файле .htaccess, но я сомневаюсь. Если вы добавляете в файл conf, не забудьте перезапустить apache, чтобы перезагрузить конфигурацию.
Если вы похожи на меня и хотите использовать SSL только на определенных страницах, то вам также нужно правило перезаписи, которое отправит вас на обычный http для остальных. Вы можете использовать следующие для обратного эффекта:
RewriteCond %{SERVER_PORT} ^443$
RewriteRule \.(gif|jpg|jpeg|jpe|png|css|js)$ - [S=1]
RewriteRule !^(checkout|login)(.*)$ http://%{SERVER_NAME}%{REQUEST_URI} [L,R]
Если вы используете Plesk, как я иметь в виду, что весь трафик не-SSL использует файл vhost.conf но все SSL трафика использует файл vhost_ssl.conf , Это означает, что ваше первое правило перезаписи, требующее SSL, будет находиться в файле vhost.conf, но второе правило, чтобы принудительно вернуться к не-SSL, должно быть отправлено в файл vhost_ssl. Если вы используете httpd.conf или .htaccess, я думаю, вы можете разместить их в одном месте.
Я также разместил этот учебник в своем блоге: Apache rewrite rules to force secure/non-secure pages.
Когда я использую ваш пример кода, а затем в Firefox и перейдите по адресу http://example.com/signup, чтобы проверить, перенаправляется ли он на https, я получаю следующую ошибку Firefox: «Firefox обнаружил, что сервер перенаправляет запрос на этот адрес таким образом, который никогда не будет завершен ». – 2008-11-03 03:51:13
Вы, вероятно, добавили директиву Redirect на сайты SSL и не SSL. Вы хотите добавить его * только * на сайт без SSL. – 2008-11-03 03:57:58