目前在我的CI项目中,我有一个处理所有帐户的控制器。如注册,登录,激活等。
我的路线就是这样......
domain.com/account/login/
或domain.com/account/register/
如何从路线中删除account
,同时还要从其他页面中删除控制器。
我基本上希望永远删除控制器。我的一个原因是SEO,搜索引擎根据网站的深度排名页面的重要性。
我似乎实现这一目标的唯一方法是为每一页做一些像route['activate'] = 'account/activate';
这样的事情,这将是一个巨大的麻烦。
答案 0 :(得分:4)
$route['^(?!other|controllers).*'] = “account/$0″;
答案 1 :(得分:2)
试试这个:
$route['(:any)'] = "account/$1";
答案 2 :(得分:1)
您的问题的答案是您必须明确设置路线。
如何知道给定函数在哪个控制器中????
你必须告诉它。
答案 3 :(得分:1)
使用mod_rewrite(如果控制器总是同名)
答案 4 :(得分:1)
好的,我可以想到一种方法来做到这一点,但这可能比为每个功能写出路线更令人痛苦。
您需要使用Router.php
扩展application/core/MY_Router.php
并覆盖_validate_request()
方法。这基本上决定了这是否是有效路线。
检查控制器类是否存在然后失败(如果它不存在)。 你需要用一些假定没有控制器段的代码替换它,然后通过每个控制器进行扫描并检查它是否包含所调用的方法(它将是段1,因为它没有控制器)。
现在是棘手的部分,在CI生命周期的这一点上你的控制器显然没有加载,所以你不能使用method_exists()检查它。
您需要一次加载一个控制器,然后每次运行
method_exists($loaded_class, $method_name)
如果是真的,则设置然后继续并致电:
$this->set_class('the_name_of_the_scanned_class_which_had_the_method');
然后CI可以继续正常运行,它会加载你的方法而用户不知道它加载了什么控制器。
..可能不值得麻烦的imho。一个更容易的解决方案是只有一个控制器和一个到该控制器的路径。