由于以下原因,我需要在codeigniter中设置动态基本网址。
答案 0 :(得分:15)
我只需要分享我的知识,因为我已经在下面提到了answer。
使用以下内容覆盖config / config.php中的行:
$config['base_url'] = 'http://'.$_SERVER['HTTP_HOST'].'/';
如果您使用的是子文件夹,可以使用以下代码:
$root = "http://".$_SERVER['HTTP_HOST'];
$root .= str_replace(basename($_SERVER['SCRIPT_NAME']),"",$_SERVER['SCRIPT_NAME']);
$config['base_url'] = "$root";
答案 1 :(得分:15)
CodeIgniter会自己找出base_url
,所以你可以这样做:
$config['base_url'] = '';
答案 2 :(得分:5)
就像在文档中说:
如果您需要允许,例如根据请求动态使用多个域,或同时使用http://和https://前缀,请记住application / config / config.php仍然是一个PHP脚本,您可以使用几行创建此逻辑代码例如:
$allowed_domains = array('domain1.tld', 'domain2.tld');
$default_domain = 'domain1.tld';
if (in_array($_SERVER['HTTP_HOST'], $allowed_domains, TRUE))
{
$domain = $_SERVER['HTTP_HOST'];
}
else
{
$domain = $default_domain;
}
if (! empty($_SERVER['HTTPS']))
{
$config['base_url'] = 'https://'.$domain;
}
else
{
$config['base_url'] = 'http://'.$domain;
}
答案 3 :(得分:2)
你也可以试试这个。
$base_url = ((isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == "on") ? "https" : "http");
$base_url .= "://". @$_SERVER['HTTP_HOST'];
$base_url .= str_replace(basename($_SERVER['SCRIPT_NAME']),"",$_SERVER['SCRIPT_NAME']);
$config['base_url'] = $base_url;
答案 4 :(得分:2)
***This code below is used for production:***
$base_url=$_SERVER['REQUEST_SCHEME']."://".$_SERVER['HTTP_HOST']."/";
$config['base_url'] = $base_url;
答案 5 :(得分:1)
我同意Janith的回答,但我有一个更好更容易的解决方案。
在任何配置文件中设置配置项(例如,我在routes.php中使用它),它将在使用Controller之前重置base_url。
$lang_code = 'en';
$root_domain = 'test.org';
$base_domain_url = 'http://' . $lang_code . '.' . $root_domain;
$this->config->set_item('base_url', $base_domain_url);
在Controller中测试:
echo base_url();
结果:
http://en.test.org
答案 6 :(得分:0)
你也可以使用......
$root = "http://".$_SERVER['HTTP_HOST'];
$root .= dirname($_SERVER['SCRIPT_NAME']);
$config['base_url'] = $root;
答案 7 :(得分:0)
这将适用于命令行,本地主机和生产环境。
$protocol = is_https() ? "https://" : "http://";
$host = isset($_SERVER['HTTP_HOST']) ? $_SERVER['HTTP_HOST'] : "";
if(is_cli())
{
$config['base_url'] = '';
}
elseif(stristr($host, "localhost") !== FALSE || (stristr($host, '192.168.') !== FALSE) || (stristr($host, '127.0.0') !== FALSE))
{
$config['base_url'] = $protocol.$host."/PROJECT_FOLDER/";
}
else
{
$allowed_hosts = ['sajansaj.com', 'www.sajansaj.com'];
$config['base_url'] = in_array($host, $allowed_hosts) ? $protocol.$host."/" : "we-do-not-recognise-this-host.com";
}
答案 8 :(得分:0)
在我的情况下,我使用代理为https展示了mixed content的错误,我使用了https,一切都解决了。 只需使用以下命令覆盖config / config.php中的行:
$config['base_url'] = 'https://'.$_SERVER['HTTP_HOST'].'/';
$root = "http://".$_SERVER['HTTP_HOST'];
$root .= str_replace(basename($_SERVER['SCRIPT_NAME']),"",$_SERVER['SCRIPT_NAME']);
$config['base_url'] = "$root";