子域基于CodeIgniter控制器名称

时间:2011-08-16 22:09:19

标签: .htaccess codeigniter routes

假设我有两个不同的模块用于两个不同控制器下的站点。比如,index.php/controller1/...index.php/controller2/...

现在,是否可以在子域中拥有一个控制器URL?为清楚起见,在此示例中,可以在index.php/controller1/...mainwebsite.com/...等网址中说出index.php/controller2/..。在另一个网址中,例如controller2.mainwebsite.com/

如果是这样,最好的方法是什么? routes.php或.htaccess?在任何一种情况下,如果你能指出一个相关的链接,我会很感激如何做到这一点,这也会有所帮助。

1 个答案:

答案 0 :(得分:5)

在我看来,你想做的事情有点傻,但是,我想这不是我要说的地方。

就我看来,以下是您的选择:

修改您的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虚拟主机设置为将该子域指向与您的普通域相同的目录。

您还需要将所有链接指向子域并省略控制器。因此,如果网址通常为: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类做一些疯狂的事情:

在routes.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部分,只需在路线规则的顶部添加另一条线。我甚至都不知道这是否会起作用......但它可能会。我肯定会试一试,因为这可能是最不可能的工作量。