Wordpress get_template_directory_uri()返回http而不是https

时间:2015-10-29 15:17:12

标签: wordpress ssl https

我们最近在我们的网站上应用了SSL证书,我们希望我们所有的网址都有https://协议。

一旦我们将网站移至https://,我们的网站就会崩溃,因为资源很少,仍然指向http://。经过一段时间的研究,我发现get_template_directory_uri()总是返回http://甚至通过我们的wp_home,wp_site_url设置为https://

还有其他地方我们必须更改URL,因为我们正在使用子主题,此函数获取父主题目录。

谢谢, Raju Vishwas

7 个答案:

答案 0 :(得分:8)

检查$_SERVER['HTTPS']值。这应该设置为on1。如果在设置时有任何其他值,则此函数将输出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