codeigniter base_url不仅适用于Firefox

时间:2012-07-29 07:49:53

标签: php codeigniter firefox base-url

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

3 个答案:

答案 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'];
}