代码点火器回显 [::1] 而不是本地主机


Codeigniter echoing [::1] instead of localhost

我正在使用CodeIgniter 3作为Web平台,并尝试将语义UI CSS导入我的页面。我通过在 CSS 导入的 href 属性中使用 CodeIgniter 的 base_url() 方法来做到这一点。

但是,语义.css本身在我的服务器上导入了一些其他字体,由于资源共享策略Cross-Origin这些字体无法加载。这是chrome给我的错误消息:

"http://[::1]"中的字体已被Cross-Origin资源共享策略阻止加载:请求的资源上不存在"访问控制-允许源"标头。因此,不允许访问源"http://localhost"。

这是因为 base_url() 回显域已被[::1]而不是我在浏览器中键入的本地主机。

出于某种原因,在我看来,chrome(以及 Edge)不认为[::1]和本地主机是同一个主机,或者我只是愚蠢。我所知道的是,如果我将主语义.css文件和复杂代码 localhost 的路径更改为其中,它就可以工作,并且如果我不使用 localhost 请求我的页面,它也有效[::1]

我做过其他与此非常相似的项目,但从未出现过这种"[::1]"。究竟是什么原因导致 PHP 响应这样的路径?

这是因为你的base_url是空的。

在配置/配置中.php

$config['base_url'] = 'http://localhost/project_name';

关于http://'[::1']/更有趣的事情

您需要按如下方式编辑$config['base_url']

$config['base_url'] = '';
$config['base_url'] = ((isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == "on") ? "https" : "http");
$config['base_url'] .= "://" . $_SERVER['HTTP_HOST'];
$config['base_url'] .= str_replace(basename($_SERVER['SCRIPT_NAME']), "", $_SERVER['SCRIPT_NAME']);

文件位置:代码点火器/应用程序/配置/配置.php
使用上面的代码获取动态网址。

更准确和动态的方式

$root = "http://".$_SERVER['HTTP_HOST'];
$root .= dirname($_SERVER['SCRIPT_NAME']);
$config['base_url'] = $root;

虽然你仍然可以使用端口。

为了使用 base_url(); 您必须首先加载 URL 帮助程序。这可以在应用程序/配置/自动加载中完成.php(在第 67 行或周围):或者您可以手动使用

$this->load->helper('url');

比设置

$config['base_url'] = 'http://localhost/your_site_url';

我认为它会帮助你

这是

您需要在配置/配置中更改的内容.php,它在"本地主机"和"服务器"中都可以正常工作:

$config['base_url'] = "http://".$_SERVER['SERVER_NAME'];
$config['base_url'] .= str_replace(basename($_SERVER['SCRIPT_NAME']),"",$_SERVER['SCRIPT_NAME']);
if(!defined('DOCUMENT_ROOT')) define('DOCUMENT_ROOT',str_replace('application/config','',substr(__FILE__, 0, strrpos(__FILE__, '/'))));
$config['base_path'] = constant("DOCUMENT_ROOT");
$config['js_url'] = $config['base_url'].'js/';
$config['css_url'] = $config['base_url'].'css/';
$config['image_url'] = $config['base_url'].'img/';
// Host resolution for cross origin requests
if(ENVIRONMENT == 'production') {
    $config['host'] = 'www.<domain_name>.com';
} else {
$config['host'] = 'localhost';
}