Это похоже на общий запрос, но я не смог найти окончательные инструкции о том, как это сделать.
Я хотел бы, чтобы субдомен запускал определенный контроллер на моей установке 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» теперь будет загружать «учительский контроллер» и запускать функцию «входа» в этот контроллер.
Есть и другие вещи, которые вы можете применить, например, вложенную папку для каждого домена и т. Д.