从CodeIgniter中的URL中删除控制器名称

时间:2011-04-13 01:39:23

标签: php codeigniter controller routes

目前在我的CI项目中,我有一个处理所有帐户的控制器。如注册,登录,激活等。

我的路线就是这样......

domain.com/account/login/domain.com/account/register/

如何从路线中删除account,同时还要从其他页面中删除控制器。

我基本上希望永远删除控制器。我的一个原因是SEO,搜索引擎根据网站的深度排名页面的重要性。

我似乎实现这一目标的唯一方法是为每一页做一些像route['activate'] = 'account/activate';这样的事情,这将是一个巨大的麻烦。

5 个答案:

答案 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。一个更容易的解决方案是只有一个控制器和一个到该控制器的路径。