Kohana 3.2 Проблема маршрутизации и поддоменов - PullRequest
3 голосов
/ 11 сентября 2011

У меня есть поддомен www.panel.example.com и домен www.example.com.

Мой bootstrap.php:

<?php 
Kohana::init(array(
    'base_url'   => '/',
        'index_file' => FALSE,
));

Route::set('panel', '(<controller>(/<action>(/<id>)))', array('subdomain' => 'panel'))
    ->defaults(array(
        'directory'  => 'panel',
        'controller' => 'panel',
        'action'     => 'index',
        'subdomain'  => 'panel',
    ));
Route::set('default', '(<controller>(/<action>(/<id>)))')
    ->defaults(array(
        'controller' => 'home',
        'action'     => 'index',
    ));
?>

Когда я пишу адрес в браузере: www.panel.example.com, у меня появляется ошибка:

HTTP_Exception_404 [ 404 ]: The requested URL / was not found on this server.

Моя структура:

приложение / классы / контроллер (контроллеры домена)

приложение / классы / контроллер / панель (контроллеры поддоменов)

Как это сделать правильно?

Ответы [ 2 ]

3 голосов
/ 12 сентября 2011

Нет встроенного способа работы с поддоменами в маршрутах. Поэтому мое предложение исходит от поиска в интернете:

Один из способов сделать это - получить поддомен от SERVER global:

list($subdomain) = explode('.', $_SERVER['SERVER_NAME'], 2);

Затем вызовите контроллер или каталог в маршруте на основе этого субдомена:

Route::set('panel', '(<controller>(/<action>(/<id>)))')
  ->defaults(array(
    'directory'  => $subdomain,
    'controller' => 'panel',
    'action'     => 'index',
  ));

Или используйте маршруты лямбда / обратного вызова для большей гибкости при работе с поддоменом: http://kohanaframework.org/3.2/guide/kohana/routing#lambdacallback-route-logic

Этот ответ основан на использовании разных шаблонов для разных поддоменов: kohana v3: использование разных шаблонов для разных поддоменов

0 голосов
/ 03 сентября 2016

Я использую этот код для проверки необходимости установки маршрута для субдомена.

//Set an array with subdomains and Configs
$arrDomainsDirectories = array(
    'services'=>array(
        'subdomain'=>'services',
        'directory'=>'Services',
        'controller' => 'Home',
        'action'     => 'index'
    ),
    'default'=>array(
        'subdomain'=>NULL,
        'directory'=>'',
        'controller' => 'Home',
        'action'     => 'index'
    )
);

//Config Route based on SERVER_NAME
$subdomain = explode('.', $_SERVER['SERVER_NAME'], 2);

//If Not Subdomain set Default
if(count($subdomain) <= 1){
    $subdomain = 'default';
} else {
    $subdomain = $subdomain[0];
}

$routeConfig = $arrDomainsDirectories[$subdomain];

Route::set('default', '(<controller>(/<action>(/<id>)))', array('subdomain'=>$routeConfig['subdomain']))
    ->defaults(array(
        'directory' => $routeConfig['directory'],
        'controller' => $routeConfig['controller'],
        'action'     => $routeConfig['action']
    ));
...