使用ApacheRewrite从HTTP转为HTTPS,反之亦然,但我得到了302响应,我的应用程序出错了

使用ApacheRewrite从HTTP转为HTTPS,反之亦然,但我得到了302响应,我的应用程序出错了,apache,mod-rewrite,ssl,http-status-code-302,Apache,Mod Rewrite,Ssl,Http Status Code 302,我真的希望有人知道我做错了什么,因为我确实不知道 我们的网站上有一个特定的页面,上面有帐户余额信息,我们希望通过SSL使其安全。但我们只希望这一页是安全的。我在localhost中有以下内容:80 virtualhost,它工作得非常完美: RewriteCond %{HTTPS} off RewriteCond %{SCRIPT_FILENAME} \/account\.php(.*) [NC] RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [QSA,L

我真的希望有人知道我做错了什么,因为我确实不知道

我们的网站上有一个特定的页面,上面有帐户余额信息,我们希望通过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响应。当我删除这些重写规则中的任何一条时,我都不会得到这个响应,只有当它们都存在时才会发生

我尝试过用
[R]
[R=301]
替换
[QSA]
,但没有效果。
(我知道,
%{HTTPS}
开/关有点多余;)


所以我有两个问题:

  • 是否有我忘记或做错的事情可能导致这种情况
  • 使用
    [QSA]
    是否与
    $1
    冗余?我们经常使用
    GET
    方法来指定页面以及其他内容

  • 我们正在使用PHP5.2.9和Apache2

    非常感谢


    Brian

    当它在这里时(并没有移动到服务器故障)。。试一试

    HTTP/1.1 302=已找到(并且不是错误代码),但暂时位于另一个位置

    编辑 实际上,当您将代码放在单独的虚拟主机中时,您也可以这样做

    (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]
    

    有趣的问题,但这属于serverfault.comAh。我不知道还有另外一个网站可以做这类事情。我想既然这里还有数百个其他Apache重写问题,我就来对地方了……谢谢你的输入,Cez。虽然它没有直接解决我的问题,但它确实帮助我找到了解决方案!我意识到account.php文件正在从另一个包含的文件进行函数调用,这就是导致我的“错误”的原因。一旦我将另一个文件添加到“重写条件”中,它就开始工作了。哦!
    (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]