12

I need to set dynamic base url in codeigniter due to few following reasons.

  • localhost for development and reset when it goes live
  • single application accessible from multiple domains
  • ip address may change due to dhcp (locally)
4

9 回答 9

23

我只需要分享我的知识,因为我已经找到了下面提到的答案。

只需使用以下内容覆盖 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";
于 2013-08-06T08:32:27.600 回答
18

CodeIgniter 会自己找出来base_url,所以你可以这样做:

$config['base_url'] = '';
于 2013-08-06T09:52:27.230 回答
10

就像在文档中说的:

如果您需要允许例如多个域,或者根据请求动态使用 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;
}
于 2016-05-29T01:23:04.483 回答
5

你也可以试试这个。

$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;
于 2017-03-03T06:06:17.520 回答
2
***This code below is used for production:***
        
$base_url=$_SERVER['REQUEST_SCHEME']."://".$_SERVER['HTTP_HOST']."/";
        
$config['base_url'] = $base_url;
于 2020-06-25T20:26:51.577 回答
2

我同意 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);

在控制器中测试它:

echo base_url();

结果:

http://en.test.org
于 2016-10-30T07:41:50.677 回答
0

就我而言,我使用代理为 https呈现混合内容的错误,我使用了 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";
于 2020-04-24T13:48:19.023 回答
0

你也可以使用...

$root = "http://".$_SERVER['HTTP_HOST'];
$root .= dirname($_SERVER['SCRIPT_NAME']);
$config['base_url']    = $root;
于 2015-07-27T05:52:50.903 回答
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";
}
于 2018-09-28T10:05:29.007 回答