Apache .htaccess перенаправляет https на http и наоборот - PullRequest
2 голосов
/ 31 января 2012

Я пытаюсь установить Drupal 7, чтобы перенаправить три страницы в https и заставить все остальное вернуться в http. В отдельности первое правило переписывания здесь работает. Когда оба включены, ничего не работает, и все перенаправляется обратно в /index.php

# Turn SSL on for checkout except for checkout, signup/login and user/login
RewriteCond %{HTTPS} off
RewriteCond %{REQUEST_URI} ^(\/checkout)$ [NC,OR]
RewriteCond %{REQUEST_URI} ^(\/signup\/login)$ [NC,OR]
RewriteCond %{REQUEST_URI} ^(\/user\/login)$ [NC]
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]

# Turn SSL off everything but checkout, signup/login and user/login
RewriteCond %{HTTPS} on
RewriteCond %{REQUEST_URI} !(checkout|signup\/login|user\/login) [NC]
RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1 [R=301,L]

1 Ответ

0 голосов
/ 31 января 2012

Это выглядит правильно, и правила работают для меня.Поскольку первое правило работает, я предполагаю, что 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?

...