当我将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'中有所不同。
答案 0 :(得分:1)
当我在Windows主机文件上使用自定义主机时,我遇到了这种问题。 我添加了以下行:
127.0.0.1 example.com
但忘记添加www。
因此,为了避免这些类型的问题,我总是在主机上添加,而另一个没有www
。
127.0.0.1 example.com www.example.com
问题是某些浏览器会在每个网址上自动添加www,而其他浏览器则不会。
不要忘记在apache中添加vhosts配置文件中的主机。 (假设您使用的是apache)。
答案 1 :(得分:0)
通过将base_url留空来修复它。现在CI只是自动猜测它
$config['base_url'] = "";
$config['index_page'] = 'index.php';
答案 2 :(得分:0)
实际上你正在做的是从Firfox获取你的网站" www.example.com"以及其他浏览器" example.com"
只有在没有CORS(跨源请求共享)违规的情况下,Ajax才能正常工作。这意味着如果您在www.example.com上,则无法向example.com发送ajax请求 实际上, www.example.com 和 example.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;
}
如果相反,只需改变=== to!= in if if condition。
但是,如果出于任何原因,您必须保留这两个域,那么您应该在当前域中调用您的ajax脚本。
然后,您的base_url()函数应返回当前域。例如:
function base_url(){
return 'http'.
(isset($_SERVER['HTTPS'])?'s':'').'://'.$_SERVER['SERVER_NAME'];
}