如果您的网站位于处理SSL的负载平衡服务上,那么您的服务器可能无法在服务器变量中获取任何内容$_SERVER[\'HTTPS\']
, 和$_SERVER[\'SERVER_PORT\']
可能是80,而应该是443(参见此Stack Overflow answer 详细信息)。
如果是这种情况,并且您无法让您的主机更改它,那么您可能需要伪造它并告诉PHP它是SSL。将您的主页和站点URL设置为使用https,以便WordPress生成的所有URL都显示为https URL。然后将此代码放入插件中(here\'s a ready-made one, 将其放入插件文件夹并激活):
// if site is set to run on SSL, then force-enable SSL detection!
if (stripos(get_option(\'siteurl\'), \'https://\') === 0) {
$_SERVER[\'HTTPS\'] = \'on\';
}
注意:这可能会适得其反,因为您可能有代码(在插件或您自己的代码中)来检查页面是否通过SSL加载,如果不是,则重定向。您的服务器现在无法测试这一点!因此,您还应该向页面添加一些JavaScript,以便在一定程度上保证您的安全页面将通过SSL加载(这也由现成的插件完成):
<script>
if (document.location.protocol != "https:") {
document.location = document.URL.replace(/^http:/i, "https:");
}
</script>
NB:这不是万无一失的!然而,它应该能够捕获大多数情况,一个例外是禁用JavaScript然后编辑URL以强制其返回http的人。如果他们这样做,他们可能应该把信用卡凭证卖给厄尔博尼亚。