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']
值。这应该设置为on
或1
。如果设置时有其他值,该函数将输出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的主要内容,如果未能解决你的问题,请参考以下文章