it-swarm.com.ru

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

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

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

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

teacher.mysite.com : откроется mysite.com/teachers

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

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

Students.mysite.com/help/contact : откроется mysite.com/students/help/contact (controller: Students () , method: help () , аргумент: "контакт" )

Students.mysite.com/help/contact/email : откроется mysite.com/students/help/contact (controller: Students () , method: help () , arguments: "Почта для связи" )

Я понимаю, что что-то.mysite.com прямо сейчас возвращает ошибку. Итак, я считаю,

Шаг 1 будет позволять everything.mysite.com возвращать корень (mysite.com/index.php)

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

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

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

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

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

23
Prodikl

Поскольку вы хотите использовать конкретный домен для подключения к вашим контроллерам, я придумал, как использовать файл 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 (Дуэйн Тауэлл в шаге 1 другого ответа объясняет, как это сделать идеально), и у вас все будет работать, ваш общий хостинг не будет проблема, и вам не придется настраивать сервер.

31
Chococroc

Шаг 1: В CPanel, в Доменах, в поддоменах, добавьте *.mysite.com (вы вводите только часть *), чтобы перенаправить на /public_html/ (вы ничего не вводите и/или не удалите подстановочный знак) (или задайте для него любое значение по умолчанию для 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.

4
Dwayne Towell

В файле application/config/rout.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']];
}
4
AkshayBandivadekar

!!!
Очень важный шаг, который вы не хотите забыть в дополнение к прекрасному примеру 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;
}

При переходе к «teacher.mysite.com/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», вы загрузите контроллер «учителя» и запустите функцию «Логин» внутри этого контроллера.

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

0
Josh