【问题标题】:Wordpress get_template_directory_uri() returns http instead of httpsWordpress get_template_directory_uri() 返回 http 而不是 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 的代码

标签: wordpress ssl 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?
          猜你喜欢
          • 2018-10-31
          • 2017-06-06
          • 1970-01-01
          • 2017-10-12
          • 2020-03-23
          • 1970-01-01
          • 1970-01-01
          • 2021-07-14
          • 1970-01-01
          相关资源
          最近更新 更多