2

当我将我的 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”中有所不同。

4

3 回答 3

2

实际上,您正在做的是将您的网站从 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'];
}
于 2017-08-03T20:16:06.417 回答
1

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

127.0.0.1 example.com

但是忘记添加www。因此,为了避免这些类型的问题,我总是在带有www.

127.0.0.1 example.com www.example.com

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

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

于 2012-07-29T14:31:34.173 回答
0

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

$config['base_url'] = "";  
$config['index_page'] = 'index.php';
于 2012-07-29T13:06:58.640 回答