我们最近在我们的网站上应用了SSL证书,我们希望我们所有的网址都有https://协议。
一旦我们将网站移至https://,我们的网站就会崩溃,因为资源很少,仍然指向http://。经过一段时间的研究,我发现get_template_directory_uri()总是返回http://甚至通过我们的wp_home,wp_site_url设置为https://
还有其他地方我们必须更改URL,因为我们正在使用子主题,此函数获取父主题目录。
谢谢, Raju Vishwas
答案 0 :(得分:8)
检查$_SERVER['HTTPS']
值。这应该设置为on
或1
。如果在设置时有任何其他值,则此函数将输出http而不是https。
请参阅:https://core.trac.wordpress.org/browser/tags/4.5.3/src/wp-includes/functions.php#L4025
答案 1 :(得分:4)
通过此评论,发起人补充道:
在我的情况下,我们使用Load Balancer服务器和SSL证书 是在负载均衡器上安装
@pbond的答案从表面上看是问题的根本原因。
WordPress is_ssl()
功能检查$ _SERVER [' HTTPS']和$ _SERVER [' SERVER_PORT']以检查当前页面是否通过https访问,但是负载均衡器很可能是在非SSL端口80上请求您的内容。
一个很好的解决方法是使用X-Forwareded-Proto
HTTP标头来确定客户端在Load Balancer另一端实际使用的协议。
使用Apache 2.2,您可以将其添加到您的配置中:
<IfModule mod_setenvif.c>
SetEnvIf X-Forwarded-Proto "^https$" HTTPS
</IfModule>
另一个可能的解决方案(由@Roberto Poblete暗示但未解释)是将其添加到wp-config.php
if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https')
$_SERVER['HTTPS'] = 'on';
我有this to thank让我直接发送
答案 2 :(得分:2)
查看链接说明 https://codex.wordpress.org/Function_Reference/is_ssl
if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https')
$_SERVER['HTTPS'] = 'on';
答案 3 :(得分:1)
这对我来说就像一个魅力,最后被添加到 wp-config 中:
define('FORCE_SSL_ADMIN', true);
define('WP_HOME', 'https://' . $_SERVER['HTTP_HOST']);
define('WP_SITEURL', WP_HOME);
答案 4 :(得分:0)
您是否尝试使用修改过的.htaccess文件强制通过https传送内容?
在我使用的代码段下方
#Force HTTPS
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
答案 5 :(得分:0)
检查已安装插件的列表。任何涉及缓存,CDN等的插件都可能会干扰get_template_directory_uri。在我们的案例中,客户安装了许多插件以加速其站点。
在未启用任何插件的情况下,https加载良好。因此,这只是弄清楚是哪一个的情况。并在有害插件的设置中埋藏了网站路径的http版本。
答案 6 :(得分:-2)
请使用以下内容:
get_stylesheet_directory_uri();
它将是一个网址(从http://或https://开始,用于SSL)。因此,它最适合用于链接,引用其他样式表或可能最常见的图像。
https://codex.wordpress.org/Function_Reference/get_stylesheet_directory_uri