【问题标题】:php $_SERVER doesn't have HTTPS valuephp $_SERVER 没有 HTTPS 值
【发布时间】:2012-07-20 12:08:04
【问题描述】:

好的,我有一个奇怪的问题:我为客户域设置了一个 ssl 证书。在那个域上,我有一个 php 脚本,除了 print_r 输出 Php $_SERVER 超级全局之外什么都不做。在浏览器中,我转到 https://www.example.com,但 $_SERVER 数组中不仅没有 HTTPS 值,而且 SCRIPT_URI 是 http:/ /www.example.com,SERVER_PORT 为 80,SERVER_PROTOCOL 为 HTTP/1.1。

这里可能发生了什么?

谢谢

【问题讨论】:

  • 听起来像是一个糟糕的代理/负载平衡器/转发类型的东西,实际的 Web 服务器没有直接接收请求。有关设置的更多信息吗?
  • 并非如此。这是一个带有网络解决方案的廉价共享服务器。我正在使用一些基本的 mod 重写规则,但除此之外它只是开箱即用的托管。这是我应该称之为网络解决方案的事情吗?说到服务器,我一无所知。
  • 是的,向主机询问 Web 服务器如何传达 HTTPS 状态是个好主意。
  • 哈。是的,询问主机服务器是如何设置的确实有意义,不是吗。谢谢。你也说对了。经过数小时的搁置、无数的自动菜单和不止几个技术支持操作员,我终于被告知你所说的我会是什么。必须解决字体端的问题。请看下面我的回答。也许您可以提出更好的解决方案。

标签: php https


【解决方案1】:

因此,网络解决方案将 https 查询重定向到防火墙或一些此类废话后面,因此无法在服务器端检测 ssl 连接。

我已经使用以下 javascript 处理了重定向。不是最干净的解决方案,但它似乎有效。

if(window.location.protocol == "http:")
    window.location.href = "https://" + window.location.host + window.location.pathname;

【讨论】:

    【解决方案2】:

    是的,这是 PHP 的正确行为。 https 的东西在超级全局 $_SERVER 数组中表示为 http。我对这种奇怪的行为也有疑问。 希望对你有帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-09-07
      • 2010-10-11
      • 2010-11-13
      • 2011-09-22
      • 2015-11-03
      • 2023-04-04
      相关资源
      最近更新 更多