Использование Apache Rewrite для перехода с HTTP на HTTPS и наоборот, но я получаю ответ 302 и мои ошибки приложения - PullRequest
0 голосов
/ 18 февраля 2010

Я действительно надеюсь, что кто-то знает, что я делаю здесь неправильно, потому что я точно не знаю!

У нас есть определенная страница на нашем сайте, на которой есть информация об остатке на счете, и мы хотим сделатьэто безопасно с SSL.Но мы хотим, чтобы эта страница была безопасной.У меня есть следующее на localhost: 80 virtualhost, и он отлично работает:

RewriteCond %{HTTPS} off
RewriteCond %{SCRIPT_FILENAME} \/account\.php(.*) [NC]
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [QSA,L]

Однако, как вы можете догадаться, мы хотим, чтобы все другие страницы просто использовали HTTP.Итак, я вставил этот маленький фрагмент в мой localhost: 443 virtualhost:

RewriteCond %{HTTPS} on
RewriteCond %{SCRIPT_FILENAME} !\/account\.php(.*) [NC]
RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1 [QSA,L]

... И вот тогда возникает проблема.У меня нет проблем с возвратом к HTTP, но когда я нажимаю ссылку, чтобы перейти на страницу учетной записи, она меняется на HTTPS, но я сразу получаю сообщение об ошибке 302.Я не получаю этот ответ, когда я удаляю либо одно из этих правил перезаписи, это происходит только тогда, когда они там есть.

Я попытался заменить [QSA] на [R] и [R=301], безрезультатно.
(Я знаю, что включение / выключение %{HTTPS} немного избыточно;))

Итак, у меня есть два вопроса:

  1. Есть ли что-то, что я забыл или делаю неправильно, что может быть причиной этого?
  2. Используется ли [QSA] избыточно с $1?Мы часто используем метод GET для указания страниц, а что нет.

Мы используем PHP 5.2.9 и Apache 2.

Большое спасибо заранее !!

Brian

1 Ответ

1 голос
/ 18 февраля 2010

Пока он здесь (и не перенесен на серверный сбой) .. попробуйте

RewriteCond %{SERVER_PORT} !^443$
RewriteRule ^/account\.php https://%{HTTP_HOST}/account.php [R=301,QSA,L]

HTTP / 1.1 302 = Найдено (и не является кодом ошибки), но временно в другом месте.

EDIT На самом деле, пока вы помещаете код в отдельные виртуальные хосты, вы также можете сделать

(In :80) 
RewriteRule ^/account\.php https://%{HTTP_HOST}/account.php [R=301,QSA,L]

(in :443)
RewriteCond %{REQUEST_URI} !/account\.php$
RewriteRule ^(.*) http://%{HTTP_HOST}$1 [R=301,QSA,L]
...