如何在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”以及访问段。
答案 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的许多好处?