在CodeIgniter中设置动态基本URL

时间:2013-08-06 08:32:28

标签: php codeigniter

由于以下原因,我需要在codeigniter中设置动态基本网址。

  • localhost用于开发和重置时
  • 可从多个域访问的单个应用程序
  • 由于dhcp(本地)
  • ,IP地址可能会发生变化

9 个答案:

答案 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";