【问题标题】:Wordpress (WooCommerce?) forces https (when it shouldn't)Wordpress(WooCommerce?)强制 https(不应该)
【发布时间】:2015-10-12 10:44:58
【问题描述】:

我在公司接管的 WooCommerce 安装中遇到了一个奇怪的问题。它不是我们建造的,不幸的是它建造得非常糟糕,所以我不太确定里面到底发生了什么。

它突然开始“强制”https 连接,但据我所知,无论是代码还是管理员都没有任何变化。我们在服务器上运行 Git,工作树中没有任何变化,我在上传文件夹中搜索了可疑文件,但没有结果。这不太可能是某种恶意软件。该站点未使用 https/ssl 设置,因此这当然会触发超时。

我检查了数据库,home_urlsite_url 都设置为“http://...”。 WooCommerce 选项“强制 ssl”设置为 false。此外,我们正在运行插件“Better WP Security/iThemes Security”,该插件还提供“强制 ssl”选项,但该选项也设置为 false。

我尝试在 wp-config.php 中将常量 FORCE_SSL_ADMINFORCE_SSL_LOGIN 都设置为 false - 仍然没有运气。我也尝试使用 .htaccess 重写规则,但这也无济于事。

好像和一个请求头有关; HTTPS: 1(用$ curl -I -H"HTTPS: 1" http://... 测试)。当那个设置为0 时,这不会发生。但是 Chrome 似乎默认发送它,而其他浏览器则不然。我尝试清除 cookie/数据等。问题也出现在我同事的浏览器中(她以前从未访问过该站点)。托管公司表示这与服务器配置无关。

以前有没有人经历过这种情况,或者知道它可能与什么有关?


更新: 运行curl -I -H"HTTPS: 1" http://www.example.com/wp-admin/ 几乎可以确认这与 Wordpress 有关。 cookie 由 WPML 设置,这表明 Wordpress 已初始化。检查Location: 标头:

HTTP/1.1 302 Moved Temporarily
Server: Apache
X-Powered-By: PHP/5.6.11
Expires: Wed, 11 Jan 1984 05:00:00 GMT
Cache-Control: no-cache, must-revalidate, max-age=0
Pragma: no-cache
Set-Cookie: _icl_current_admin_language=sv; expires=Wed, 22-Jul-2015 16:06:25 GMT; Max-Age=7200; path=/wp-admin/
Set-Cookie: _icl_current_language=sv; expires=Thu, 23-Jul-2015 14:06:25 GMT; Max-Age=86400; path=/
Set-Cookie: PHPSESSID=xxx; path=/
Location: https://www.example.com/wp-login.php?redirect_to=https%3A%2F%2Fwww.example.com%2Fwp-admin%2F&reauth=1
Vary: Accept-Encoding
Content-Type: text/html; charset=UTF-8
Date: Wed, 22 Jul 2015 14:06:26 GMT
X-Varnish: nnn
Age: 0
Via: 1.1 varnish
Connection: keep-alive

【问题讨论】:

  • 您的服务器配置是否导致了 ssl 站点的重定向?
  • 联系了托管公司,他们说不是,忘了说。
  • 您的网站使用的是哪个版本的 woocommerce?

标签: php wordpress http https woocommerce


【解决方案1】:

【讨论】:

  • 是的,这似乎可以解决问题。非常感谢!
【解决方案2】:

@Zertuk 的解决方案是正确的:升级到最新的 WooCommerce 应该可以解决问题,因为 change that @Zertuk has linked

提供更多详细信息:Chrome 已实施来自万维网联盟 (W3C) 的升级不安全请求规范。该规范的Section 3.2.1HTTPS HTTP 请求标头字段,其中指出

3.2.1。 HTTPS HTTP 请求标头字段

HTTPS HTTP 请求头域向服务器发送信号 表达客户对加密和认证的偏好 响应,并且它可以成功处理 upgrade-insecure-requests 指令以做出该偏好 尽可能无缝地提供。

此偏好由以下 ANBF 表示:

"HTTPS:" *WSP "1" *WSP

如果设置了 HTTPS: 1 标头,WooCommerce 在 2.3.13 版之前的 is_ssl() 函数会错误地重写响应中的所有 URL。

升级到最新版本的 WooCommerce(当前为 2.3.13)修复了该错误。

【讨论】:

  • 很好的解释!解决了这个问题 - 还意识到我们正在运行的所有其他 WooCommerce 网站都坏了哈哈。谢谢!
【解决方案3】:

我通过关闭 WooCommerce 设置中的强制 SSL 设置来解决此问题,然后通过此插件中提供的复选框(在编辑页面屏幕上)明确设置这 3 个 WooCommerce 页面以使用 SSL。

The pages that needing SSL according to WooCommerce are:
1. Checkout
2. Checkout -> Pay
3. My Account

也试试,

<?php 
if (is_ssl()) {
 //action to take for page using SSL
}
?>

如果页面使用 SSL,则返回 true(检查 HTTPS 或端口 443)。

【讨论】:

  • 该站点未设置 SSL(没有证书或任何东西!)并且强制 ssl 设置 is 设置为 false。请仔细阅读问题。
【解决方案4】:

柯比是对的。

我快速修复了修改 Wordpress 核心函数 is_ssl()。

我在函数开始时返回 false,因为我的一些网站没有 SSL。

由于更新不建议修改Wordpress的核心,但我可以控制。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-29
    • 1970-01-01
    • 1970-01-01
    • 2016-09-12
    相关资源
    最近更新 更多