【问题标题】:codeigniter base_url not working with Firefox onlycodeigniter base_url 仅适用于 Firefox
【发布时间】:2012-07-27 07:13:59
【问题描述】:

虽然我将我的 base_url 设置为 http://example.com/,但 Ajax 在所有浏览器中都可以正常工作,除了 Firefox。

当我将其设置为 http://www.example.com/ 时,它在 Firefox 中有效,而在其他浏览器中停止工作。
它会导致 Access-Control-Allow-Origin 错误(这会阻止对不同域的 ajax 调用。它认为域是不同的,因为www

有人遇到过这个问题吗? 提前感谢您的宝贵时间!

$config['base_url'] = "http://example.com/";  // this works in all browsers, not in Firefox
$config['index_page'] = 'index.php';

$config['base_url'] = "http://www.example.com/";  // this works in only in Firefox, but not in other browsers
$config['index_page'] = 'index.php';

错误是“XMLHttpRequest 无法加载 http://www.example.com/index.php/controller/function。Access-Control-Allow-Origin 不允许来源 http://example.com。”

这两个链接只是在'www'不同。

【问题讨论】:

  • 能否请您发布代码。
  • @pkkabeer 确定,刚刚做了
  • 您应该在您的域设置中进行从example.comexample.com 的重定向。这样用户就会一直来example.com
  • @Waqar Alamgir 没明白
  • 在域管理中,您应该将用户从 abc.com 重定向到 www.abc.com,这样用户将始终来到 www.abc.com。例如 http://facebook.com 重定向到 http://www.facebook.com

标签: php codeigniter firefox base-url


【解决方案1】:

通过将 base_url 留空来修复它。现在 CI 只是自动猜测它

$config['base_url'] = "";  
$config['index_page'] = 'index.php';

【讨论】:

    【解决方案2】:

    我在 Windows 主机文件上使用自定义主机时遇到了此类问题。 我添加了以下行:

    127.0.0.1 example.com
    

    但忘记添加 www。 所以为了避免这些类型的问题,我总是在主机上添加一个没有www

    127.0.0.1 example.com www.example.com
    

    问题是有些浏览器会在每个 url 上自动添加 www,而有些则不会。

    不要忘记在 apache 的 vhosts 配置文件中添加主机。 (假设您使用的是 apache)。

    【讨论】:

      【解决方案3】:

      实际上你正在做的是将你的网站从 Firfox 获取为“www.example.com”,从其他浏览器获取“example.com”

      只有在没有违反 CORS(跨源请求共享)的情况下,Ajax 才能正常工作。这意味着如果您在 www.example.com 上,则无法向 example.com 发起 ajax 请求 实际上,就浏览器和搜索引擎而言,www.example.comexample.com 是完全不同的域。您实际上可以在每个域上托管两个完全不同的网站。 您应该在这两个域之一之间进行选择,并将所有请求重定向到另一个域。 从 www 重定向到非 www

      if (substr($_SERVER['HTTP_HOST'], 0, 4) === 'www.') {
        header('Location: http'.(isset($_SERVER['HTTPS']) && $_SERVER['HTTPS']=='on' ? 's':'').'://' . substr($_SERVER['HTTP_HOST'], 4).$_SERVER['REQUEST_URI']);
      exit;
      }   
      

      反之,只需将上述 if 条件中的 === 更改为 !=。

      但是,如果出于任何原因,您必须保留这两个域,那么您应该在当前域中调用您的 ajax 脚本。

      然后,您的 base_url() 函数应该返回当前域。例如:

      function base_url(){
      return 'http'.
       (isset($_SERVER['HTTPS'])?'s':'').'://'.$_SERVER['SERVER_NAME'];
      }
      

      【讨论】:

        猜你喜欢
        • 2015-02-09
        • 2013-04-11
        • 1970-01-01
        • 2018-07-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多