Search
Write a publication
Pull to refresh

CodeIgniter: размещение сайта на нескольких доменах

При работе над одним из проектов возникла необходимость его размещения на нескольких доменах. Каждый регион (участник проекта) имеет свое доменное имя, но исходный код и база данных – общая: kiev.domain.com, kharkov.domain.com, и т.д.
Проект делается на CodeIgniter 2.0 (в связи с его ожидаемым релизом), но это не суть важно, изложенный подход работает и на 1.7.2.


Способ 1


Решение проблемы «в лоб» — размещение проекта на нескольких хостинг-аккаунтах, под каждым доменом – отдельно. Недостатки такого решения понятны – необходимость поддержки нескольких копий проекта, а также – затраты на хостинг.

Способ 2


Немного подумав, открываем файл index.php и обращаем внимание на строку 41:
$application_folder = "application";
Т.е. название папки с приложением можно менять в зависимости от имени домена, по которому происходит обращение к приложению:
$application_folder = $_SERVER['SERVER_NAME'];
Остаётся создать соответствующее количество копий папки application (в нашем случае они будут называться kiev.domain.com и kharkov.domain.com) и указать значения $config['base_url'] в файлах config.php (т.е. – 'http://kiev.domain.com/' и 'http://kharkov.domain.com/').
Один из недостатков устранен – можно размещаться на одном хостинг-аккаунте. Но вопрос поддержки нескольких копий проекта остается.

Способ 3


Окей, идём дальше. Возвращаем строку 41 в файле index.php в начальное состояние, удаляем копии папки application.
В /application/config/ создадим конфигурационный файл city.php, который будем загружать через autoload.php:
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

// Присвоим значения по умолчанию
$config['city'] = 'Киев';
$config['base_url'] = 'http://kiev.domain.com/';

switch($_SERVER['SERVER_NAME']) {
case('kiev.domain.com'): {
$config['city'] = 'Киев';
$config['base_url'] = 'http://kiev.domain.com/';
// возможна инициализация других параметров
break;
}
case('kharkov.domain.com'): {
$config['city'] = 'Харьков';
$config['base_url'] = 'http://kharkov.domain.com/';
// возможна инициализация других параметров
break;
}
// и другие регионы…
}

/* End of file city.php */
/* Location: ./application/config/city.php */

Теперь по значению $this->config->item('city') можно из контроллеров, вьювов и моделей определить, для какого региона следует генерировать вывод.
И проблема сопровождения нескольких копий приложения также устранена.
Возможно, существуют более элегантные решения, с удовольствием выслушаю предложения и замечания.
Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.