Это выглядит правильно, и правила работают для меня.Поскольку первое правило работает, я предполагаю, что RewriteEngine on
находится где-то выше этих правил.Есть ли в ваших файлах htaccess другие правила?Может быть что-то другое, вызывающее проблему.
Я попробовал следующие правила и перенаправлен, как и ожидалось, оба из них.Отсутствие правила HTTPS не должно иметь значения.
RewriteEngine on
# Turn SSL on for checkout except for checkout, signup/login and user/login
RewriteCond %{REQUEST_URI} ^(\/checkout)$ [NC,OR]
RewriteCond %{REQUEST_URI} ^(\/signup\/login)$ [NC,OR]
RewriteCond %{REQUEST_URI} ^(\/user\/login)$ [NC]
RewriteRule ^(.*)$ http://%{HTTP_HOST}/ssl/$1 [R=301,L]
# Turn SSL off everything but checkout, signup/login and user/login
RewriteCond %{REQUEST_URI} !(checkout|signup\/login|user\/login) [NC]
RewriteRule ^ssl/(.*)$ http://%{HTTP_HOST}/$1 [R=301,L]
Я настроил эти файлы для проверки с помощью:
- public /
- checkout (содержимое: checkout)
- foobar (содержимое: foobar)
- регистрация /
- вход (содержимое: регистрация / вход)
- user/
- login (содержимое: пользователь / login)
- ssl /
- checkout (содержимое: ssl checkout)
- foobar (содержимое: ssl foobar)
- регистрация /
- вход (содержимое: регистрация ssl / вход)
- пользователь /
- вход (содержимое: пользователь ssl / логин)
Вы можете опробовать эти правила и посмотреть, как они работают должным образом:
$ curl -L http://samhuri.net/checkout
ssl checkout
$ curl -L http://samhuri.net/ssl/checkout
ssl checkout
$ curl -L http://samhuri.net/foobar
foobar
$ curl -L http://samhuri.net/ssl/foobar
foobar
Передайте curl
флаг -i
, чтобы увидеть заголовки и коды состояния.
Так что я подозреваю, что что-то еще не так.У вас есть другие правила для перенаправления на или из https?