Wordpress get_template_directory_uri()返回http而不是https

Raj*_*was 14 wordpress ssl https

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

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

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

谢谢,Raju Vishwas

pbo*_*ond 13

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

请参阅:https://core.trac.wordpress.org/browser/tags/4.5.3/src/wp-includes/functions.php#L4025


kak*_*oma 6

通过此注释,发起者添加了:

就我而言,我们使用的是Load Balancer服务器,并且SSL证书已安装在Load Balancer上

@pbond的答案将问题归结为根本原因。WordPress的is_ssl()函数检查$ _SERVER ['HTTPS']和$ _SERVER ['SERVER_PORT']来检查是否通过https访问当前页面,但是负载平衡器很可能在非SSL端口80上请求您的内容。

一个好的解决方法是使用 X-Forwareded-Proto HTTP标头确定客户端在负载均衡器另一侧实际使用的协议。

使用Apache 2.2,您可以将其添加到您的配置中:

<IfModule mod_setenvif.c>
  SetEnvIf X-Forwarded-Proto "^https$" HTTPS
</IfModule>
Run Code Online (Sandbox Code Playgroud)

另一个可能的解决方法(由@Roberto Poblete阻止,但未解释)是将其添加到 wp-config.php

if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https')
$_SERVER['HTTPS'] = 'on';
Run Code Online (Sandbox Code Playgroud)

我有此要感谢送我在正确的直接


小智 5

这对我来说就像一个魅力,最后添加到wp-config中:

define('FORCE_SSL_ADMIN', true);
define('WP_HOME', 'https://' . $_SERVER['HTTP_HOST']);
define('WP_SITEURL', WP_HOME);
Run Code Online (Sandbox Code Playgroud)


Ati*_*riq -2

请使用以下内容:

get_stylesheet_directory_uri();
Run Code Online (Sandbox Code Playgroud)

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

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