0

ここで私が間違っていることを誰かが知っていることを本当に願っています。

当サイトの特定のページに口座残高情報があり、SSL で保護したいと考えています。しかし、この 1 つの特定のページだけを安全にしたいと考えています。localhost:80 仮想ホストに次のものがありますが、完全に機能します。

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


ただし、ご想像のとおり、他のすべてのページでは HTTP のみを使用する必要があります。そこで、この小さなスニペットを localhost:443 仮想ホストに貼り付けました。

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

...そして、問題が発生するのはそのときです。HTTP に戻るのは問題ありませんが、リンクをクリックしてアカウント ページに移動すると、HTTPS に変わりますが、すぐにエラー 302 応答が返されます。これらの書き換えルールのいずれかを削除しても、この応答は得られません。両方が存在する場合にのみ発生します。

とを置き換えてみまし[QSA]たが、役に立ちませんでした。(オン/オフが少し冗長である ことは承知しています;))[R][R=301]
%{HTTPS}


だから私は2つの質問があります:

  1. これを引き起こしている可能性のある忘れ物や間違ったことはありますか?
  2. [QSA]と冗長に使用してい$1ますか? このメソッドを使用して、GETページとそうでないものを指定します。


PHP 5.2.9 と Apache 2 を使用しています。

よろしくお願いします!


ブライアン

4

1 に答える 1

1

それがここにある間(そしてserverfaultに移動されていない間).試してみてください

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

HTTP/1.1 302 = 見つかりました (エラー コードではありません) が、一時的に別の場所にあります。

編集実際には、コードを別々のVirtualHostsに入れている間、あなたもそうするかもしれません

(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]
于 2010-02-18T09:26:32.003 に答える