【问题标题】:Access-Control-Allow-Origin OPENCART NO SOLUTIONAccess-Control-Allow-Origin OPENCART 无解决方案
【发布时间】:2015-12-28 10:09:08
【问题描述】:

我的网站有问题,正如你在 opencart 中所知道的,我们有 config.php 可以处理 HTTP 请求,下面是代码:

define('HTTP_SERVER', 'http://www.DOMAIN.com/');
define('HTTPS_SERVER', 'https://www.DOMAIN.com/');

如果我们进入网站 www. DOMAIN.com,网站将运行良好 但如果没有 www. 就无法工作,例如:http://DOMAIN.com

如果我们将 www.config.php 中删除,那么网站将运行良好。

我认为问题是 Access-Control-Allow-Origin

的原因

我尝试在 .htaccess

中使用以下代码
Header add Access-Control-Allow-Origin "*"
Header add Access-Control-Allow-Headers "origin, x-requested-with, content-type"
Header add Access-Control-Allow-Methods "PUT, GET, POST, DELETE, OPTIONS"

通过添加上述代码,网站可以正常工作,但功能不完整。 但是 jquery-2.1.1.min.js 中仍然存在问题

catalog/view/javascript/jquery/jquery-2.1.1.min.js

那么,请指导我如何使它对他们俩都有效?

例如:Domain.comwww.domain.com

【问题讨论】:

  • 这看起来像是一个错字:define('HTTPS_SERVER', 'http://www.DOMAIN.com/');。你错过了httpS
  • 它与 ssl 或 https 无关,这个问题是其他一些问题的原因,这就是我在这里发布这个问题的原因。
  • 停止在两个不同的主机名上托管您的网站。设置从example.comwww.example.com 的重定向。

标签: javascript .htaccess cors opencart


【解决方案1】:

请求的资源上不存在“Access-Control-Allow-Origin”标头。因此,不允许访问 Origin 'https://sx.xyz.com'。

我在 Ajax 响应中也遇到了与跨域数据交换类似的问题,即 error undefined。但标题中的响应是 Status Code:200 OK

Failed to load https://www.Domain.in/index.php?route=api/synchronization/checkapikey: 
No 'Access-Control-Allow-Origin' header is present on the requested resource. 
Origin 'https://sx.xyz.in' is therefore not allowed access.

解决方案:在我的情况下,我必须通过 Ajax 将函数 checkapikey() 调用到其他域,并获取带有数据的响应到调用所在的位置

if (($this->request->server['REQUEST_METHOD'] == 'POST') && isset($this->request->server['HTTP_ORIGIN'])) {

        $this->response->addHeader('Access-Control-Allow-Origin: ' . $this->request->server['HTTP_ORIGIN']);
        $this->response->addHeader('Access-Control-Allow-Methods: GET, PUT, POST, DELETE, OPTIONS');
        $this->response->addHeader('Access-Control-Max-Age: 1000');
        $this->response->addHeader('Access-Control-Allow-Credentials: true');
        $this->response->addHeader('Access-Control-Allow-Headers: Content-Type, Authorization, X-Requested-With');

        $headers = getallheaders();
...
}

【讨论】:

    【解决方案2】:

    配置到http://www.DOMAIN.com/ 后,将这些行放入位于 OpenCart 根文件夹的 .htaccess 文件中。如果您没有该文件,则必须先创建它。

    RewriteEngine On
    RewriteCond %{HTTP_HOST} !^www\.
    RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]
    

    这些规则会将所有非 www 流量重定向到您的域 www 版本,以避免跨域冲突。由于所解释的冲突,您可能会遇到的一些额外困难是登录后会话丢失,以及由于回调 URL 设置不正确而导致 PayPal 检查我们后的订单不完整。上述配置应该可以解决所有提到的问题。

    【讨论】:

      【解决方案3】:

      打开这个文件:system/library/url.php .并寻找 if ($this->ssl && $secure) {

      删除这些代码(在 2 个位置)

      'https://' . $_SERVER['HTTP_HOST'] .
      

      您的代码块应如下所示:

      if ($this->ssl && $secure) {
                  //$url = 'https://' . $_SERVER['HTTP_HOST'] . rtrim(dirname($_SERVER['SCRIPT_NAME']), '/.\\') . '/index.php?route=' . $route;
                  $url = rtrim(dirname($_SERVER['SCRIPT_NAME']), '/.\\') . '/index.php?route=' . $route;
              } else {
                  //$url = 'http://' . $_SERVER['HTTP_HOST'] . rtrim(dirname($_SERVER['SCRIPT_NAME']), '/.\\') . '/index.php?route=' . $route;
                  $url =  rtrim(dirname($_SERVER['SCRIPT_NAME']), '/.\\') . '/index.php?route=' . $route;
              }
      

      请注意,我将原始代码注释掉,在其下复制,然后我删除了 'https://' 。 $_SERVER['HTTP_HOST']

      可选: 刷新页面时,您会收到一堆“通知”错误。采取这个额外的步骤: 打开目录/控制器/启动/seo_url 替换:

       return $url_info['scheme'] . '://' . $url_info['host'] . (isset($url_info['port']) ? ':' . $url_info['port'] : '') . str_replace('/index.php', '', $url_info['path']) . $url . $query;
      

      return (isset($url_info['port']) ? ':' . $url_info['port'] : '') . str_replace('/index.php', '', $url_info['path']) . $url . $query;
      

      【讨论】:

        猜你喜欢
        • 2017-07-20
        • 2016-10-22
        • 2017-07-25
        • 1970-01-01
        • 2016-07-10
        • 1970-01-01
        • 2016-03-24
        • 2017-11-15
        相关资源
        最近更新 更多