使用SSL的BloInfo()和Get_模板_目录_uri()?

时间:2013-01-16 作者:Jake Wilson

我有一个Wordpress主题,我正试图放在一个只有SSL的网站上。该站点没有非SSL版本。

Wordpress主题使用各种功能,如bloginfo(\'pingback_url\'), bloginfo(\'template_directory\'), get_template_directory_uri(), 等主题的所有典型功能。

所有这些函数都生成http 链接,而不是https, 因此,它们都不会加载,因为该站点不存在非SSL版本。

如何强制Wordpress使用https 为了一切?

2 个回复
SO网友:WP Themes

尝试安装此WordPress插件。http://wordpress.org/extend/plugins/wordpress-https/installation/ 但一定要阅读安装说明,因为在激活插件后,它还有一些额外的事情要做。

SO网友:webaware

如果您的网站位于处理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的人。如果他们这样做,他们可能应该把信用卡凭证卖给厄尔博尼亚。

结束