当 URL 包含 .php 时,SSL 锁不会显示在浏览器地址栏中

当 URL 包含 .php 时,SSL 锁不会显示在浏览器地址栏中

我已经在托管机器上安装了 SSL 证书。并强制将其重定向到“https”位置。当它重定向到包含 .html 扩展名的位置时,它也有效。但当重定向到包含 .php 扩展名的位置时,完全失败。

在编码中我的改变是 -

$ssl_cer = TRUE;

if ($ssl_cer && isset($_SERVER['HTTPS'])) {
   header('Strict-Transport-Security: max-age=500');
} 
elseif ($ssl_cer && !isset($_SERVER['HTTPS']) )
{
    header("HTTP/1.1 301 Moved Permanently");

    header("Location: https://" . $_SERVER["SERVER_NAME"] . $_SERVER["REQUEST_URI"]);

    exit();
 }

完成此操作后,我的代码会发生变化;如果您尝试使用 http,则它会重定向到 https,并且还会在某些页面上显示锁定。但我想知道,如果启用了 ssl,它是否应该将 $_SERVER['HTTPS'] 此服务器值设置为“开启”,实际上我没有在我的脚本上获取此值。

需要尽快帮助来解决这个问题。我的描述正确吗?

答案1

这里您有多个问题,通过使用浏览器,您可以一次测试所有问题,但最后只得到一个结果:失败。

尝试使用curl一次只测试一个问题。从重定向开始:

在浏览器中看到重定向返回、发出新请求、再次重定向返回、再次发出新请求、最后返回页面的情况并不罕见,但这一切都发生得太快,以至于您无法通过查看 URL 栏来看到它。浏览器还可以缓存 302 和 301 响应,这会使问题更加混乱。curl在测试时使用,它是明确的。

curl -I http://example.com/foo.html

curl -I http://example.com/foo.php

查看 HTTP 响应代码和Location:标头的值。如果这些符合您的预期,请继续下一个问题。

此后,您可以测试页面的 SSL:

curl -I https://example.com/foo.php

下一步在浏览器中完成时可能最容易,即(如@DavidSchwartz 所说)检查页面加载的所有资源(图像、样式表、javascript 等)。您需要检查所有 URL 是否以 开头,https://以及所有加载资源的所有 SSL 证书是否有效。

Chrome 开发人员工具或 Firefox 的 Firebug 插件将是这里最好的工具。

如果您仍然不明白,在这里发布实际的 URL 会有所帮助,因为当有更多人查看时,错误会变得更容易找到。

相关内容