我已经在托管机器上安装了 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 会有所帮助,因为当有更多人查看时,错误会变得更容易找到。