使用PHP重定向到HTTPS时出现问题

使用PHP重定向到HTTPS时出现问题,php,Php,我刚刚为我正在工作的站点安装了一个ssl,显然我需要将一些页面(签出等)重定向到https 我目前正在使用此代码: if (!isset($_SERVER['HTTPS']) || !$_SERVER['HTTPS']) { $url = 'https://www.mysite.php'; header("location: ". $url); exit(); } Firefox告诉我,“页面试图以一种永远无法完成的方式重定向。” 当我在安全页面上时,$\u服务器

我刚刚为我正在工作的站点安装了一个ssl,显然我需要将一些页面(签出等)重定向到https

我目前正在使用此代码:

if (!isset($_SERVER['HTTPS']) || !$_SERVER['HTTPS']) {   
    $url = 'https://www.mysite.php';
    header("location: ". $url);
    exit();
}
Firefox告诉我,“页面试图以一种永远无法完成的方式重定向。”

当我在安全页面上时,$\u服务器的var\u转储显示no['HTTPS']或类似内容。这是一个网络解决方案小型unix软件包。是否可能需要检查其他服务器变量,或者可能需要更改某些服务器设置


显然,脚本从未找到HTTPS,因此它正在尝试无休止地重定向。

如果使用
,则会变得更清晰:

if (!isset($_SERVER['HTTPS']) OR !$_SERVER['HTTPS']) {   
即使您已经处于HTTPs模式,也有可能条件之一的计算结果始终为true

您需要

if (!isset($_SERVER['HTTPS']) AND !$_SERVER['HTTPS']) {   

我也使用这种形式的SSL检查。对我来说,我的代码是有效的。这就是我要做的

if(empty($_SERVER['HTTPS']) || $_SERVER['HTTPS'] != "on") {
    header("Location: https://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']);
}
这非常有效,还可以将您重定向到上一个url


希望这有帮助。

我认为
$\u服务器['HTTPS']
是特定于Apache的。如果他们使用的是nginx或其他东西,它可能根本不会出现。为什么不使用重写引擎呢?它工作得很好。或者多亏了他的名字的法律,
如果(!(isset($\u服务器['HTTPS']或!$\u服务器['HTTPS']))
;-)如果你想检查这个_服务器是否存在,请打印($\u服务器);在您可以通过Https访问的页面上。然后检查是否设置了变量键HTTPS。或者,如果您可以找到任何可能表明您处于https模式的密钥(可能您获得了存储当前位置(包括当前方案)的位置密钥),因此在某些情况下,您可以使用“/^https:\/\/\/”进行预匹配,并检查https是否正在使用。print\r($\u服务器)显示在HTTP和HTTPS页面上时没有差异…我在上面扫描了好几次!如果您处于https模式,则Web服务器不设置此标志。编辑:抱歉,按enter键。所以我在我的服务器上创建了一个文件,它打印了$\u server我有下面的密钥,它也表示ssl:ssl\u TLS\u SNI我的页面上也有一个包含服务器签名的字符串,有一个字符串像…端口443,所以如果你知道端口XXX只用于ssl,你可以预先匹配。是的,我注意到的一件事是端口号发生了变化,所以这可能是一个可能的解决方案,我会检查。将返回报告。如果您有权访问Web服务器配置,(自己的服务器),您也可以手动处理_服务器密钥,转到http端口80虚拟主机设置,并在virtualhost部分中写入SetEnv USE_SSL 0,然后转到SSL虚拟主机并使用相同的配置,但对于0,请使用1,这样您就可以检查该$_服务器['USE_SSL']而不是HTTPS。在这种情况下,我的代码将“on”更改为“1”,或者您可以在ssl虚拟主机上添加SSLOptions+StdEnvVars,而不是HTTPS密钥(和ssl_TLS)