2010-01-14 109 views
1

请帮助我。我对kohana相当陌生。如何最好地做到这一点,控制器是根据子域来选择的。例如:路由取决于子域

www.site.com - >控制器:siteroot。方法:运行 admin.site.com - > Controller:adminsite。方法:运行 moderator.site.com - > Controller:moderatorsite。方法:运行 director.site.com - >控制器:directorite。方法:运行 默认:主管:partnersite。方法:运行

run方法为这些子域执行操作,并将从监督模块中获取一个页面。

我用Kohana的3.0

回答

4

我不认为Kohana中提供的任何方式来处理这个直接,但你总是可以添加一些自定义代码到你的bootstrap.php文件,设置了根据不同的路线当前的子域名:

switch ($_SERVER['SERVER_NAME']) 
{ 
    case 'site.com': 
     // Default routes. 
     $controller = 'siteroot'; 
     break; 
    case 'admin.site.com': 
     // Admin routes. 
     $controller = 'adminsite'; 
     break; 
    // Etc. 
} 

Route::set('default', '(<controller>(/<action>(/<id>)))') 
    ->defaults(array(
       'controller' => $controller, 
       'action' => 'run')); 

您是否确实需要为每种情况分别设置域名?使用site.com/admin,site.com/moderator等可能更明智。

+0

非常感谢您!如何做正确的事情。我没有一个,而不是两个子域。很多,每个合作伙伴都拥有自己的子域名。合作伙伴不断变化,他们拥有相同的网站,除了极少数例外。 – YaBog 2010-01-14 12:42:15

0

由于该子域将映射到目录,因此无需添加任何自定义代码,因此正是路线是什么在Kohana的3

子域名:admin.site.com

映射到目录:〜/的public_html /管理/

控制器:Controller_Adminsite

控制器目录:〜/应用/班/控制器/ adminsite.php

的对的bootstrap.php路线:

Route::set('admin', 'admin(/<action>(/<id>))') 
     ->defaults(array(
       'controller' => 'adminsite', 
       'action'  => 'run', 
     )); 
1

我不认为它会工作在箱子外面,马特。 如果它是app_path的一个子目录,它将是真的,但如果它不是,它将永远不会路由到文件夹的index.php。 它可以通过apache的htaccess或httpd.ini完成。