我们最近在我们的网站上应用了SSL证书,我们希望我们所有的网址都有https://协议。
一旦我们将我们的网站移至https://,我们的网站就会崩溃,因为资源很少,仍然指向http://。经过一段时间的研究,我看到get_template_directory_uri()总是返回http://甚至通过我们的wp_home,wp_site_url设置为https://
是否有任何其他地方我们必须更改URL,因为我们正在使用子主题,此函数获取父主题目录。
谢谢, Raju Vishwas
我们最近在我们的网站上应用了SSL证书,我们希望我们所有的网址都有https://协议。
一旦我们将我们的网站移至https://,我们的网站就会崩溃,因为资源很少,仍然指向http://。经过一段时间的研究,我看到get_template_directory_uri()总是返回http://甚至通过我们的wp_home,wp_site_url设置为https://
是否有任何其他地方我们必须更改URL,因为我们正在使用子主题,此函数获取父主题目录。
谢谢, Raju Vishwas
检查 $_SERVER['HTTPS']
值。这应该设置为 on
要么 1
。如果在设置时有任何其他值,则此函数将输出http而不是https。
看到: https://core.trac.wordpress.org/browser/tags/4.5.3/src/wp-includes/functions.php#L4025
查看链接说明 https://codex.wordpress.org/Function_Reference/is_ssl
if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https')
$_SERVER['HTTPS'] = 'on';
通过此评论,发起人补充说:
在我的情况下,我们使用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';
我有 谢谢 直接向我发送信息
您是否尝试使用修改后的.htaccess文件强制通过https传送内容?
在我正在使用的片段下方:
#Force HTTPS
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
检查安装的插件列表。任何涉及缓存,CDN等的插件都可能会干扰get_template_directory_uri。在我们的案例中,客户安装了大量的插件,据说可以加快他的网站速度。
没有插件启用https加载正常。所以这只是一个弄清楚它是哪一个的案例。并且埋藏在有问题的插件的设置中有一个http版本的站点路径。
请使用以下内容:
get_stylesheet_directory_uri();
它将是一个网址(从http://或https://开始,用于SSL)。因此,它最适合用于链接,引用其他样式表或可能最常见的图像。
https://codex.wordpress.org/Function_Reference/get_stylesheet_directory_uri