Javascript Opencart-产品描述中插入的图像是http而不是https

Javascript Opencart-产品描述中插入的图像是http而不是https,javascript,php,ssl,ckeditor,opencart,Javascript,Php,Ssl,Ckeditor,Opencart,我们使用的是Opencart 1.5.5.1(我知道这是一个过时的版本,但是以前的开发人员几乎将所有内容硬编码到核心文件中,因此目前无法升级到最新版本) 我最近浏览了整个网站,将所有出现的http://更改为https://,并修复了一些Opencart核心bug。例如,签出页面上的一个众所周知的问题(catalog/controller/checkout/cart.php,第170行): 更改为: $this->data['action'] = $this->url->lin

我们使用的是Opencart 1.5.5.1(我知道这是一个过时的版本,但是以前的开发人员几乎将所有内容硬编码到核心文件中,因此目前无法升级到最新版本)

我最近浏览了整个网站,将所有出现的
http://
更改为
https://
,并修复了一些Opencart核心bug。例如,签出页面上的一个众所周知的问题(catalog/controller/checkout/cart.php,第170行):

更改为:

$this->data['action'] = $this->url->link('checkout/cart');
为此:

$this->data['action'] = $this->url->link('checkout/cart', '', 'SSL');
如上所述,我能够轻松解决大多数问题

但是。。。我的问题是文件管理器。每当我想使用所见即所得编辑器中的“插入图像”功能链接产品描述中的图像时,它会自动创建一个
http://
链接,而不是
https://
。当然,这会破坏该页面上的SSL,到目前为止,我找到的唯一解决方案是手动将插入的图像链接从
http
更改为
https

我试过的。。。我浏览了文件管理器的控制器文件(admin/controller/common/filemanager.php),试图找到一个生成图像链接的位置,似乎Opencart正在将相对路径传递给ckEditor的
image.js
插件,然后我猜它会创建整个链接(但我不是100%确定)。不幸的是,我对Javascript不是很在行,而且
image.js
被缩小了。在询问之前,我试着用谷歌搜索一下,我找到了几个关于这个问题的论坛帖子,但没有一个真正提到过解决这个问题的方法(或者我可能错过了)

任何Opencart的大师,谁遇到过同样的事情,并能为我指出正确的方向,请

事先非常感谢


编辑:我在Admin/System/Settings中启用了SSL,我的.htaccess文件将每个http页面请求重写为https。

我已经设法解决了这个问题。如果其他人有相同问题,请执行以下操作:

打开
admin/controller/common/filemanager.php
。转到第35行:

$this->data['directory'] = HTTP_CATALOG . 'image/data/';
将其更改为:

if (isset($this->request->server['HTTPS']) && (($this->request->server['HTTPS'] == 'on') || ($this->request->server['HTTPS'] == '1'))) {
    $this->data['directory'] = HTTPS_CATALOG . 'image/data/';
} else {
    $this->data['directory'] = HTTP_CATALOG . 'image/data/';
}
我希望有帮助


编辑:我刚刚检查过,这个问题仍然存在于1.5.6.4中,因此它可能对其他人也是一个实际的修复。

我对https://url和CKEditor的图像选择器都有同样的问题。我也在Opencart 1.5.5.1:)上,需要更改CKE配置,以便插入带有不包括协议、域名/IP地址等的相对URL的图片

我试图搜索负责构建完整URL的代码,但找不到它。谢谢你指出,这很有帮助

我的解决方案是基于你的。然而,我原来的代码看起来有点不同。无论如何,我从我的
admin/controller/common/filemanager.php
中获取了以下部分:

$this->data['directory'] = HTTP_IMAGE . 'data/';
。。。并将其替换为:

$this->data['directory'] = str_replace(HTTP_CATALOG, '/', HTTP_IMAGE) . 'data/';
这不会检查是否启用了HTTPS,因为这实际上并不重要——所选文件的路径相对于根目录,而与协议无关

这是我制作的完整vQmod:

<modification>
    <id>forcing ckeditor to use relative paths for images</id>
    <version>1.5.5.x</version>
    <vqmver></vqmver>
    <author>Stackoverflow Comunity</author>
    <file name="admin/controller/common/filemanager.php">
        <operation>
            <search position="replace"><![CDATA[
                $this->data['directory'] = HTTP_IMAGE . 'data/';
            ]]></search>
            <add><![CDATA[
                // make sure HTTP_CATALOG has a trailing slash
                // check admin/config.php
                $this->data['directory'] = str_replace(HTTP_CATALOG, '/', HTTP_IMAGE) . 'data/';
            ]]></add>
        </operation>
    </file>
</modification>

强制ckeditor为图像使用相对路径
1.5.5.x
Stackoverflow社区
数据['directory']=HTTP_IMAGE'数据/';
]]>
数据['directory']=str_replace(HTTP_目录,'/',HTTP_图像)。'数据/';
]]>

再次感谢您分享您的解决方案。这很有帮助

为什么不在.js中按Ctrl+F,然后在文件中搜索字符串“http://”?迷你们不能触摸字符串,因此您可以轻松地将该部分替换为“https://”。如果链接是在另一个文件中生成的,也可以这样做。事实证明,URL的生成是在filemanager.php中处理的,这就是它获得HTTP链接而不是HTTPS的地方。根据Opencart的开发者的说法,它应该是这样的。这没有任何意义,因为安全页面上的非安全资源会破坏安全层。