最近我更新了我的网站:CMS(Drupal)、它的操作系统(Ubuntu 14.04)和 Apache(2.4.7)。
情况是,当上网时https://example.com/whateverPHP 无法检测 HTTPS。$_SERVER['HTTPS']
为空并$_SERVER['SERVER_PORT']
返回 80。这会导致问题,因为 Drupal 无法检测 HTTPS 并且正在提供 HTTP 文件(混合内容)。
唯一显示连接在 HTTPS 上的变量是 HTTP_X_FORWARDED_PROTO,并且 Drupal 不处理用于提供内容的此设置。
<<< 除了 LAMP 和 Drupal 之外,我没有反向代理或任何高级配置,只有一个站点。>>>错了,我使用 CloudFlare 运行我的网站。
考虑到我不想要 Drupal 解决方案,我已经管理好了。我想知道为什么 Apache 没有向 PHP 发送正确的 SERVER 变量,或者我的配置可能出了什么问题。
感谢您的帮助。
<<< 最终编辑 >>>PD:我通过反向代理 CloudFlare 运行我的网站。安装后很容易忘记这一点。查看我的答案,了解您必须设置哪些选项才能获得预期的服务器变量。
答案1
问题是我忘记了我正在使用 CloudFlare(安装后很容易忘记)。这就是为什么 HTTP_X_FORWARDED_PROTO 说的是 HTTPS,因为我使用了反向代理。
我的 CloudFlare 在 CRYPTO / SSL 和 SPDY 下的配置也显示:灵活。当更改为完整时,PHP 将返回预期的 HTTPS 和 SERVER_PORT 变量。