问题 Wordpress get_template_directory_uri()返回http而不是https


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

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

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

谢谢, Raju Vishwas


13052
2017-10-29 15:17


起源

你把“WP_CONTENT_URL”设置为什么?我倾向于在wp-config.php中为https设置内容 - 如果可能有帮助,我可以给你完整的设置 - Simon Pollard
当然,让我检查一下。 - Raju Vishwas
你能解决这个问题吗? - BTR Naidu
@Simon Pollard我知道这是很久以前的事了,但我现在面临同样的问题,你能不能给我一个线索如何更新我的wp-config.php文件来解决这个问题?谢谢!!!! - Dimentica
检查服务器是否正在返回HTTPS,在我的情况下我们使用Load Balancer服务器并且SSL证书是在负载均衡器上安装的,所以我的apache总是返回http而不是https,我不得不硬代码返回https - Raju Vishwas


答案:


检查 $_SERVER['HTTPS'] 值。这应该设置为 on 要么 1。如果在设置时有任何其他值,则此函数将输出http而不是https。

看到: https://core.trac.wordpress.org/browser/tags/4.5.3/src/wp-includes/functions.php#L4025 


8
2017-10-20 18:24



这是$ _SERVER ['HTTPS'] - Juergen
@Juergen谢谢,我现在也把它变成了答案。 - pbond


查看链接说明 https://codex.wordpress.org/Function_Reference/is_ssl

if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https')
$_SERVER['HTTPS'] = 'on';

2
2018-01-09 01:47



添加一些解释,回答这个答案如何帮助OP解决当前问题 - ρяσѕρєя K


通过此评论,发起人补充说:

在我的情况下,我们使用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';

我有 谢谢 直接向我发送信息


2
2017-10-24 16:38





您是否尝试使用修改后的.htaccess文件强制通过https传送内容?

在我正在使用的片段下方:

#Force HTTPS
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

0
2017-07-14 09:07





检查安装的插件列表。任何涉及缓存,CDN等的插件都可能会干扰get_template_directory_uri。在我们的案例中,客户安装了大量的插件,据说可以加快他的网站速度。

没有插件启用https加载正常。所以这只是一个弄清楚它是哪一个的案例。并且埋藏在有问题的插件的设置中有一个http版本的站点路径。


0
2017-09-18 11:10





请使用以下内容:

get_stylesheet_directory_uri();

它将是一个网址(从http://或https://开始,用于SSL)。因此,它最适合用于链接,引用其他样式表或可能最常见的图像。

https://codex.wordpress.org/Function_Reference/get_stylesheet_directory_uri


-2
2017-10-29 15:26



get_template_directory_uri() 还返回一个URI ...并检查SSL。它们既有用,又可以切换到 get_stylesheet_directory_uri()  不 在这种情况下更有意义,因为OP正在使用子主题。 - rnevius
问题是,我们的主题是使用get_template_directory_uri()和get_stylesheet_directory_uri(),但它仍然返回http:// - Raju Vishwas
您是否为您的域安装了SSL? - Atif Tariq
您是否将这两个网址从http:更改为https:www.yourdomain.com/wp-admin/options-general.php? - Atif Tariq
嗨Raju,请尝试这些插件: wordpress.org/plugins/wp-force-ssl  wordpress.org/plugins/wordpress-https - Atif Tariq