apache - 使用 Apache Rewrite 从 HTTP 转到 HTTPS,反之亦然,但我收到 302 响应并且我的应用程序出错

标签 apache mod-rewrite ssl http-status-code-302

我真的希望有人知道我在这里做错了什么,因为我肯定不知道!

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

我尝试用 [R][R=301] 替换 [QSA],但无济于事。
(我知道 %{HTTPS} 开/关有点多余;))


所以我有两个问题:

  1. 是否有我忘记或做错的事情导致了这种情况?
  2. 使用 [QSA] 是否与 $1 多余?我们经常使用 GET 方法来指定页面和其他内容。


我们使用的是 PHP 5.2.9 和 Apache 2。

提前致谢!


布莱恩

最佳答案

虽然它在这里(并没有移动到 serverfault)..尝试

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

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

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

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

关于apache - 使用 Apache Rewrite 从 HTTP 转到 HTTPS,反之亦然,但我收到 302 响应并且我的应用程序出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2287107/

相关文章:

php - 丢失图像时出现 symfony 500 错误

php - htaccess 没有重定向到主 index.php

ruby - 带有自签名证书的 Neo4j gem https

apache - 一台 Apache2 服务器上的两个 SSL 域;一个服务正确,另一个服务于 'Index of/' 页面

apache - 高级 htaccess 重定向

linux - 禁止使用 curl/wget 远程下载网页

java - Apache ·马胡特。建议的限制或偏移

apache - 如何从 Apache URL 重写条件中排除子目录

c# - 实现瑞典 Swish 支付 - C# - 无法创建 SSL/TLS 安全通道 - 证书签名请求

ssl - 从特定域捕获数据包转储