【发布时间】:2011-05-01 20:58:34
【问题描述】:
如何判断一个 php 页面是通过 http 还是 https 访问的?
【问题讨论】:
-
如果了解有关您的 PHP 配置的更多信息(例如,它在哪个服务器上运行)会很有用。
-
以下仅涉及检查 $_SERVER["HTTPS"] 的答案不完整。完整答案请参阅stackoverflow.com/questions/1175096/…。
标签: php
如何判断一个 php 页面是通过 http 还是 https 访问的?
【问题讨论】:
标签: php
如果请求是使用 HTTPS 发送的,您将在 $_SERVER 超全局变量中拥有一个额外的参数 - $_SERVER['HTTPS']。您可以检查它是否已设置
if( isset($_SERVER['HTTPS'] ) ) {
【讨论】:
$_SERVER 文档所说:“这个数组中的条目是由 Web 服务器创建的。不能保证每个 Web服务器将提供其中任何一个;服务器可能会省略一些,或提供此处未列出的其他内容。"
如果您的请求是通过 HTTPS 发送的,您将有一个名为“HTTPS”的额外服务器变量
if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] != 'off') { //HTTPS }
【讨论】:
preg_match('/https|HTTPS/',$_SERVER ["REQUEST_SCHEME"]) == 1
/https|HTTPS/ 显然忽略了 i 模式修饰符,因为它是更简洁的脚本和最佳实践。
$protocol = strtolower(substr($_SERVER["SERVER_PROTOCOL"],0,5))=='https'?'https':'http';
$protocol = isset($_SERVER["HTTPS"]) ? 'https' : 'http';
这些都应该工作
【讨论】:
这可能会变得更加复杂,具体取决于 PHP 在您的环境中所处的位置,因为您的问题非常广泛。这可能取决于是否有负载均衡器以及它的配置方式。以下是一些相关的问题:
【讨论】:
【讨论】:
您应该可以通过检查 $_SERVER['HTTPS'] 的值来做到这一点(它应该只在使用 https 时设置)。
【讨论】: