Как стать автором
Обновить

Гибкий base_url

Время на прочтение2 мин
Количество просмотров7.8K
Как-то мнe захотелось чтобы при обращению к странице по https, также все внутренние линки были изменены на варианты с https. Так как view страницы загружается с разными url, относительные пути не проходили (js/script.js) и я решил использовать функцию base_url (echo base_url().'js/script.js'), но дело в том что она подставляет содержимое переменной $config['base_url'], которая в свою очередь статична.
Немного поискав я нашел решение — динамический базовый путь в $config['base_url']. Также положительным эффектом является то, что теперь не нужно изменять base_url при переносе файлов между доменами.

Удобнее всего добавит эти изменения сразу в файл system/config/config.php

$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']);


Есть и более сложный вариант:
/* Detect ssl connectivity */
if ( isset($_SERVER['HTTPS']) ) {
  $ssl = $_SERVER['HTTPS'];
}elseif ( isset($_SERVER['HTTP_FRONT_END_HTTPS']) ) {
  $ssl = $_SERVER['HTTP_FRONT_END_HTTPS'];
}else {
  $ssl = "OFF";
}
$root = (stripos($ssl, "ON") !== FALSE) ? "https" : "http";

/* Many pages/apps served through the same domain */
if ( isset($_SERVER['HTTP_X_FORWARDED_HOST']) ) {
  list($host) = explode(',', str_replace(' ', '', $_SERVER['HTTP_X_FORWARDED_HOST']));
} else {
  $host = $_SERVER['HTTP_HOST'];
}

$root .= "://".$host;

if ( ! isset($_SERVER['ORIG_SCRIPT_NAME']) ) {
  $root .= str_replace(basename($_SERVER['SCRIPT_NAME']),"",$_SERVER['SCRIPT_NAME']);
}
else {
  $root .= str_replace(basename($_SERVER['ORIG_SCRIPT_NAME']),"",$_SERVER['ORIG_SCRIPT_NAME']);
}

$config['base_url'] = "$root";


Код взят с форума Codeigniter: Automatic configbase url
Теги:
Хабы:
Всего голосов 12: ↑6 и ↓60
Комментарии4

Публикации

Ближайшие события