Субдомен на основе имени контроллера CodeIgniter - PullRequest
2 голосов
/ 17 августа 2011

Предположим, у меня есть два разных модуля для сайта, который находится под двумя разными контроллерами. Как, index.php/controller1/... и index.php/controller2/...

Теперь, возможно ли иметь один из URL контроллера в поддомене? Чтобы прояснить, в этом примере можно ли сказать, index.php/controller1/... в URL, как mainwebsite.com/... и index.php/controller2/... в другом URL, например, controller2.mainwebsite.com/?

Если так, каков наилучший способ сделать это? маршруты .php или .htaccess? И в любом случае я буду признателен за небольшую помощь, как это сделать, если вы можете указать мне соответствующую ссылку, это также будет полезно.

1 Ответ

5 голосов
/ 17 августа 2011

По-моему, то, что вы пытаетесь сделать, немного глупо, но, я думаю, это не мое место, чтобы сказать.

Вот ваши варианты, насколько я понимаю:

Измените конфигурацию Apache или файл .htaccess, чтобы перенаправить вызовы к конкретному поддомену на конкретный контроллер, используя mod_rewrite:

Например (я не проверял это):

RewriteEngine on
RewriteCond %{HTTP_HOST} ^blog.example.com$
RewriteCond $1 !^(index\.php|images|css|js|robots\.txt)
RewriteRule ^(.*)$ /index.php/blog/$1 [L]

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

Вам также нужно будет указать все вашиссылки на поддомен и опустить контроллер.Таким образом, если URL-адрес обычно будет: http://www.example.com/blog/cat/awesome, то вам необходимо указать ссылку на http://cart.example.com/cat/awesome.Таким образом, вы больше не сможете использовать такие полезные вспомогательные функции, как site_url('cart/cat/awesome') - это будет для меня серьезным отключением.

Надеюсь, это имеет смысл.

Настройте свой экземпляр CI для поддержки нескольких приложений и просто укажите поддомен, указывающий на соответствующий каталог приложений

Для получения дополнительной информации: http://codeigniter.com/wiki/Multiple_Applications/

Сделайте некоторыесумасшедшие вещи с классом Route:

В вашем конфигурационном файле rout.php:

if(preg_match('/^blog/',$_SERVER['HTTP_HOST'])) {
    $route['(:any)/(:any)/(:any)/(:any)'] = 'blog/$1/$2/$3/$4';
    $route['(:any)/(:any)/(:any)'] = 'blog/$1/$2/$3';
    $route['(:any)/(:any)'] = 'blog/$1/$2';
    $route['(:any)'] = 'blog/$1';
    $route['blog'] = 'blog/index';
}

Если для любой вашей страницы требуется более 4 частей URI, просто добавьте еще одну строку ввершина правил маршрута.Я даже не знаю, сработает ли это само по себе ... но может.Я бы определенно дал ему шанс, потому что это было бы наименьшее количество работы, чем вероятно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...