假设我有两个不同的模块用于两个不同控制器下的站点。比如,index.php/controller1/...
和index.php/controller2/...
现在,是否可以在子域中拥有一个控制器URL?为清楚起见,在此示例中,可以在index.php/controller1/...
和mainwebsite.com/...
等网址中说出index.php/controller2/..
。在另一个网址中,例如controller2.mainwebsite.com/
?
如果是这样,最好的方法是什么? routes.php或.htaccess?在任何一种情况下,如果你能指出一个相关的链接,我会很感激如何做到这一点,这也会有所帮助。
答案 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部分,只需在路线规则的顶部添加另一条线。我甚至都不知道这是否会起作用......但它可能会。我肯定会试一试,因为这可能是最不可能的工作量。