代码之家  ›  专栏  ›  技术社区  ›  Nelson Ford

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

  •  0
  • Nelson Ford  · 技术社区  · 15 年前

    如何在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 回复  |  直到 12 年前
        1
  •  1
  •   Residuum    15 年前

    您是否在用户指南和wiki中查找了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的很多好处?