it-roy-ru.com

Установить динамический базовый URL в CodeIgniter

Мне нужно установить динамический базовый URL в codeigniter из-за нескольких следующих причин.

  • localhost для разработки и сброса при запуске
  • одно приложение доступно из нескольких доменов
  • iP-адрес может измениться из-за dhcp (локально)
5
Janith Chinthana

CodeIgniter сам определит base_url, так что вы можете просто сделать:

$config['base_url'] = '';
15
Mudshark

Мне просто нужно поделиться своими знаниями, так как я уже нашел ответ , как упомянуто ниже.

Просто перезапишите строку в 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";
14
Janith Chinthana

Так же, как сказать в документах:

В случае, если вам нужно разрешить, например, несколько доменов или оба префикса 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;
}
4
Erich García

Также вы можете попробовать это.

$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;
2
Rakhi Prajapati

Я согласен с ответом Джанит, но у меня есть лучшее и более простое решение.

Задайте элемент конфигурации в любых файлах конфигурации (например, я использую его в rout.php), он сбросит base_url перед использованием в Controller.

$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
1
Terry Lin

Это будет работать для командной строки, localhost и production.

$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";
}
0
Sajan Saj

Также вы можете использовать ...

$root = "http://".$_SERVER['HTTP_Host'];
$root .= dirname($_SERVER['SCRIPT_NAME']);
$config['base_url']    = $root;
0
Hafizur Rahman