【问题标题】:Subdomain based on CodeIgniter controller name基于 CodeIgniter 控制器名称的子域
【发布时间】:2011-10-28 11:28:45
【问题描述】:

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

现在,是否可以在子域中拥有一个控制器 URL?为了清楚起见,在此示例中,是否可以在诸如 mainwebsite.com/...index.php/controller2/.. 之类的 URL 中使用 index.php/controller1/...。在另一个 URL 中,例如 controller2.mainwebsite.com/

如果是这样,最好的方法是什么? routes.php 还是 .htaccess?无论哪种情况,如果您可以将我指向相关链接,我将不胜感激。

【问题讨论】:

  • 好吧,例如,假设我的网站中有两个独立的部分,一个是购物车,另一个是博客。购物车部分的所有功能都由 cart.php 控制器控制,另一个由 blog.php 控制器控制。当用户访问 mysite.com 并且当他们访问博客时,我希望购物车成为默认控制器,我希望 url 显示为 blog.mysite.com。这就是要求。

标签: .htaccess codeigniter routes


【解决方案1】:

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

据我所知,这是您的选择:

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

您还需要将所有链接指向子域并省略控制器。因此,如果 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';
}

如果您的任何页面需要超过 4 个 URI 部分,只需在路由规则顶部添加另一行。我什至不知道这本身是否可行……但它可能。我肯定会试一试,因为这很可能是最少的工作量。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-10-31
    • 1970-01-01
    • 2018-09-25
    • 2018-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多