Подтвердить что ты не робот

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

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

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

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

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

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

students.mysite.com/help: откроется mysite.com/students/help (контроллер: students(), метод: помощь())

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 позволит anything.mysite.com возвращать root (mysite.com/index.php)

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

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

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

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

Спасибо, за ваше время! - Кейт

4b9b3361

Ответ 1

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

Ответ 2

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

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

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

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

Ответ 3

В файле 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']];
}

Ответ 4

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

Переход на "teachers.mysite.com/login" теперь загрузит "учительский контроллер" и запустит функцию "входа" в этом контроллере.

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