Wordpress(WooCommerce?)强制https(什么时候不应该)

时间:2015-07-22 13:51:56

标签: php wordpress http https woocommerce

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

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

我检查了数据库,home_urlsite_url都设置为“http:// ...”。 WooCommerce选项“force ssl”设置为false。此外,我们正在运行插件“Better WP Security / iThemes Security”,该插件还提供了“force ssl”-option,但也设置为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

4 个答案:

答案 0 :(得分:3)

答案 1 :(得分:2)

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

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

  

3.2.1。 HTTPS HTTP请求标头字段

     

HTTPS HTTP请求标头字段向服务器发送信号   表达客户端对加密和经过身份验证的偏好   响应,它可以成功处理   upgrade-insecure-requests指令以获得该首选项   尽可能无缝地提供。

     

此偏好由以下ANBF表示:

     

“HTTPS:”* WSP“1”* WSP

如果设置了is_ssl()标头,则版本2.3.13之前的WooCommerce HTTPS: 1功能错误地重写了响应中的所有网址。

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

答案 2 :(得分:0)

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

def get(self, request, *args, **kwargs):
    if 'get_data' in kwargs:
        data_id = kwargs['get_data']
        step = kwargs['step']
        response = self.get_data(data_id, step)
    else:
        self.storage.reset()

        # reset the current step to the first step.
        self.storage.current_step = self.steps.first
        response = self.render(self.get_form())
    return response

并尝试,

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

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

答案 3 :(得分:0)

柯比是对的。

我快速修复了Wordpress核心功能is_ssl()。

我在函数开头返回false,因为我的某些网站没有SSL。

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