Субдомены, ведущие к контроллерам Codeigniter?

Это похоже на общий запрос, но я не смог найти окончательные инструкции о том, как это сделать.

Я хотел бы, чтобы субдомен запускал определенный контроллер на моей установке CI. Например:

students.mysite.com : откроет mysite.com/students (технически: mysite.com/index.php/students . controller: students )

teachers.mysite.com : откроет mysite.com/teachers

Сохраняя субдомен при пересечении глубже. Например:

students.mysite.com/help : откроется mysite.com/students/help ( controller : students () , method : help () )

students.mysite.com/help/contact : откроет mysite.com/students/help/contact ( контроллер : students () , метод : help () , аргумент : «контакт» )

students.mysite.com/help/contact/email : откроет mysite.com/students/help/contact ( контроллер : students () , метод : help () , аргументы : «контакт», «электронная почта» )

Я понимаю, что something.mysite.com прямо сейчас возвращает ошибку. Поэтому я полагаю:

Шаг 1 будет разрешать something.mysite.com возвращать root (mysite.com/index.php)

Шаг 2 будет считывать субдомен и вызывать этот контроллер

Шаг 3 будет читать первый аргумент после первого «/» и вызывать этот метод контроллера и передавать оставшиеся части URL в качестве аргументов

Наверное, я в шоке на первом шаге . Я нахожусь в учетной записи с общим хостингом, это что-то, что я могу сделать через CPanel ? Я попробовал добавить субдомен для * .mysite.com без всякой удачи (если только мне не нужно было ждать дольше для распространения, но я чувствую, что шансы выше, что я ошибался).

Вернемся к моей домашней установке WAMP, я бы изменил httpd.conf, не так ли? Могу ли я получить этот эффект без изменения этого файла (так как я, вероятно, не могу, поскольку я использую webhostinghub.com)

Фу, спасибо за ваше время! – Кит

Поскольку вы хотите использовать определенный домен, чтобы привести к вашим контроллерам, то, что я придумал, это использовать файл application/config/routes.php для его достижения. Идея заключается в загрузке разных контроллеров в зависимости от того, какой субдомен вы используете, поэтому вместо написания списка маршрутов для вашего домена вы пишете список маршрутов ЗАВИСИМОСТИ в домене, к которому вы обращаетесь:

 switch ( $_SERVER['HTTP_HOST'] ) { case 'students.mysite.com': $route['default_controller'] = "students"; break; case 'teachers.mysite.com': $route['default_controller'] = "teachers"; default: // The list of your $routes lines at is was... break; } 

Чтобы выполнить эту работу, вам нужно указать только субдомен в свой проект CI (Dwayne Towell в шаге 1 другого ответа объясняет, как это сделать отлично), и у вас будет все, что вы работаете, ваш общий хостинг не будет и вам не придется настраивать сервер.

Шаг 1: В CPanel, в доменах, в субдоменах добавьте *.mysite.com (вы входите только в * часть) для перенаправления на /public_html/ (вы не вводите ничего и / или удаляете подстановочный знак) (или установите это как текущее значение по умолчанию для http://www.mysite.com в настоящее время.

Шаг 2 и 3: используйте mod_rewrite для захвата субдомена и переместите его в часть «каталога» URL-адреса. Я подозреваю, что это будет что-то вроде: (но я еще не пробовал, RewriteLogLevel 9 – ваш друг)

 RewriteEngine on RewriteCond %{HTTP_HOST} ^([^\.]+)\.mysite\.com$ [NC] RewriteRule ^(.*)$ http://www.domain.com/index.php/%1/$1 [L] 

Я также не знаю, можете ли вы сделать выше, используя .htaccess . Я только сделал переписывание из httpd.conf.

В файле application / config / routes.php вам нужно написать

 $subDomains = array(); $subDomains['students.mysite.com'] = "student"; $subDomains['teachers.mysite.com'] = "teachers"; if(array_key_exists($_SERVER['HTTP_HOST'], $subDomains)) { $route['default_controller'] = $subDomains[$_SERVER['HTTP_HOST']]; } 

!!!
Очень важный шаг, который вы не хотите забывать в дополнение к замечательному примеру Chococroc, – это перенаправить любые сегменты обратно на контроллер субдомена, иначе вы закончите маршрутизацию на контроллер, который, вероятно, не существует. Пример использования существующего кода Chococroc

 switch ( $_SERVER['HTTP_HOST'] ) { case 'students.mysite.com': $route['default_controller'] = "students"; break; case 'teachers.mysite.com': $route['default_controller'] = "teachers"; default: // The list of your $routes lines at is was... break; } 

Переход на «teachers.mysite.com/login» будет загружать контроллер «login» НЕ ожидаемый «учительский контроллер».

Если вы не хотите этого неожиданного поведения, вам нужно перенаправить любые сегменты обратно в контроллер поддомена. Теперь они будут функцией этого контроллера.

 switch ( $_SERVER['HTTP_HOST'] ) { case 'students.mysite.com': $route['default_controller'] = "students"; $route['(:any)'] = "students/$1"; break; case 'teachers.mysite.com': $route['default_controller'] = "teachers"; $route['(:any)'] = "teachers/$1"; default: // The list of your $routes lines at is was... break; } 

Переход на «teacher.mysite.com/login» теперь будет загружать «учительский контроллер» и запускать функцию «входа» в этот контроллер.

Есть и другие вещи, которые вы можете применить, например, вложенную папку для каждого домена и т. Д.