Wordpress get_template_directory_uri() 返回 http 而不是 https

Posted

技术标签:

【中文标题】Wordpress get_template_directory_uri() 返回 http 而不是 https【英文标题】:Wordpress get_template_directory_uri() returns http instead of https 【发布时间】:2016-01-29 19:45:33 【问题描述】:

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

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

是否还有其他地方需要更改 URL,因为我们使用的是子主题,并且此函数获取父主题目录。

谢谢, 拉朱·维什瓦斯

【问题讨论】:

您将“WP_CONTENT_URL”设置为什么?我倾向于在 wp-config.php 中为 https 设置东西——如果有帮助的话,我可以给你我的完整设置 好的,让我检查一下。 你能解决这个问题吗? @Simon Pollard 我知道这是很久以前的事了,但我现在面临同样的问题,所以你能告诉我如何更新我的 wp-config.php 文件来解决案子?谢谢!!!! 检查服务器是否返回 HTTPS,在我的情况下,我们使用负载均衡器服务器并且 SSL 证书安装在负载均衡器上,所以我的 apache 总是返回 http 而不是 https,我不得不努力返回 https 的代码 【参考方案1】:

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

define('FORCE_SSL_ADMIN', true);
define('WP_HOME', 'https://' . $_SERVER['HTTP_HOST']);
define('WP_SITEURL', WP_HOME);

【讨论】:

【参考方案2】:

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

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

【讨论】:

【参考方案3】:

发起人补充说:

在我的例子中,我们使用的是负载均衡器服务器和 SSL 证书 安装在负载均衡器上

@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>

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

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

我有this to thank 直接发送给我

【讨论】:

【参考方案4】:

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

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

【讨论】:

它是 $_SERVER['HTTPS'] @Juergen 谢谢,我现在也在答案中大写了。【参考方案5】:

查看链接注释 https://codex.wordpress.org/Function_Reference/is_ssl

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

【讨论】:

添加一些解释,说明此答案如何帮助 OP 解决当前问题【参考方案6】:

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

在我正在使用的 sn-p 下方:

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

【讨论】:

【参考方案7】:

请使用以下内容:

get_stylesheet_directory_uri();

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

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

【讨论】:

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

以上是关于Wordpress get_template_directory_uri() 返回 http 而不是 https的主要内容,如果未能解决你的问题,请参考以下文章

wordpress怎样安装主题

什么是WordPress?

wordpress是啥

如何安装Wordpress

如何进行wordpress的二次开发

wordpress怎样搭建网站