子域基于CodeIgniter控制器名称

red*_*lue 2 .htaccess routes codeigniter

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

现在,是否可以在子域中拥有一个控制器URL?为了说清楚,在这个例子中,是否可以index.php/controller1/...在类似mainwebsite.com/...和的URL中说index.php/controller2/...在另一个URL中controller2.mainwebsite.com/

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

Kyl*_*ris 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]
Run Code Online (Sandbox Code Playgroud)

我认为这至少应该指向正确的方向.当然,这假设您的子域指向相同的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类做一些疯狂的事情:

在你的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';
}
Run Code Online (Sandbox Code Playgroud)

如果您的任何页面需要超过4个URI部分,只需在路径规则的顶部添加另一行.我甚至都不知道这是否会起作用......但它可能会.我肯定会给它一个机会,因为它可能是最少量的工作.