我想将已登录的用户推送到HTTPS,但让未登录的用户保留在HTTP上(已经设置了https)。我从另一个SO帖子(很抱歉,现在找不到要引用的帖子)中获取了此代码段,并将其嵌套在if($ loggedin)条件下,这样,未登录的用户就不必使用https。我所有的路径都是相对的。
if($loggedin)
{
if (!isset($_SERVER['HTTPS']) || $_SERVER['HTTPS'] !== 'on') {
if(!headers_sent()) {
header("Status: 301 Moved Permanently");
header(sprintf(
'Location: https://%s%s',
$_SERVER['HTTP_HOST'],
$_SERVER['REQUEST_URI']
));
exit();
}
}
}
我尝试在函数中放入一些JavaScript警报,但是在加载页面时,我从未看到警报,而是直接转到重定向错误消息。我不知道它是否相关,但是我正在使用AWS上的apache服务器进行弹性负载平衡来运行它。
关于我在这里可能做错了什么的任何想法?还是由于我的JavaScript警报未显示而进行故障排除的提示?谢谢你。
编辑:我找到了我最初从以下代码中获取的SO帖子:使用.htaccess和mod_rewrite强制SSL / https
您的问题中没有足够的信息,但是您提到其中之一是在使用负载平衡器。
如果要终止负载平衡器上的SSL,但在ELB和实例之间使用HTTP,则此检查将始终失败:
if (!isset($_SERVER['HTTPS']) || $_SERVER['HTTPS'] !== 'on') {
相反,您将需要检查X-Forwarded-Proto
原始请求是否为HTTPS。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句