如何处理所有段都是任意的动态URI?

时间:2009-07-21 15:58:04

标签: mod-rewrite codeigniter

如何在CodeIgniter(当前为1.7.1)中推送这样的URI:

example.com/seg1/seg2/seg3/seg4/

example.com/seg1/seg2/

等。通过控制器中的单个类方法,其名称不会出现在URI中?在常规的PHP场景中,我会使用mod_rewrite这样的东西:

RewriteRule ^([^/]+)/$ myfile.php?one=$1 [L]  
RewriteRule ^([^/]+)/([^/]+)/$ myfile.php?one=$1&two=$2 [L]  
RewriteRule ^([^/]+)/([^/]+)/([^/]+)/$ myfile.php?one=$1&two=$2&three=$3 [L]  
RewriteRule ^([^/]+)/([^/]+)/([^/]+)/([^/]+)/$ myfile.php?one=$1&two=$2&three=$3&four=$4 [L]

(我在PHP中对这些段进行了清理和验证,如果无效则返回404)

但是在Codeigniter中我无法弄清楚如何在没有至少第一段硬编码的情况下做到这一点,但随后使用自定义路由它仍然希望将后续段视为方法调用。

我是CI的新手,但到目前为止,除了这一部分外,还设法移植整个现有网站。我不知道所有部分如何在这个问题上聚集在一起,所以任何建议都是受欢迎的。

澄清:我在开始我的项目之前阅读了关于URI库,路由等的文档,并且它们对各种事情都很有帮助,但是这些特定问题并没有得到解决。我没有看到URI的所有片段如何通过URI中未命名的控制器以及所有片段都是任意的控制器。路由示例假设您知道第一个段的值。我已经知道如何删除“index.php”以及访问段。

1 个答案:

答案 0 :(得分:1)

您是否在用户指南和维基中查找了URI路由?他们应该告诉你几乎所有关于路由,重写和访问不同URI段的事情。

http://codeigniter.com/user_guide/general/routing.html

http://codeigniter.com/user_guide/libraries/uri.html

http://codeigniter.com/wiki/mod_rewrite/

[编辑:]

这是长篇描述: 没有办法不对第一段进行“硬编码”,你仍然可以“硬编码”第二段。

您希望通过编辑system / application / config / routes.php中的路径来完成您想要完成的任务:

$route['(:any)'] = 'your_default_controller/index/$1';

$route['default_controller'] = "your_default_controller";

因此,URI的第一部分将是控制器的方法。您可以通过

访问(初始)URI的所有段
$this->uri->segment(n)

然后,您将使用方法索引为每个请求调用所需的函数。

旁注:你为什么要使用MVC框架,因为你没有使用MVC的许多好处?