我真的希望有人知道我在这里做错了什么,因为我当然不知道!
我们网站上有一个特定页面,其中包含帐户余额信息,我们希望使用 SSL 使其安全。但我们只希望这一特定页面是安全的。我在 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 响应。当我删除其中任何一个重写规则时,我都没有收到此响应,只有当它们都存在时才会发生。
我尝试用 and 替换[QSA]
,[R]
但[R=301]
无济于事。
(我知道%{HTTPS}
开/关有点多余;))
所以我有两个问题:
- 是否有什么我忘记或做错了可能导致这种情况的原因?
- 是否使用
[QSA]
冗余$1
?我们经常使用该GET
方法来指定页面以及不指定页面。
我们使用的是 PHP 5.2.9 和 Apache 2。
提前谢谢了!!
布赖恩