【问题标题】:How can I handle dynamic URIs where all segments are arbitrary?如何处理所有段都是任意的动态 URI?
【发布时间】:2012-12-13 07:06:58
【问题描述】:

如何在 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”以及访问段。

【问题讨论】:

    标签: mod-rewrite codeigniter


    【解决方案1】:

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

    【讨论】:

    • 删除 index.php 后,您可以使用 $this->uri->segment(n).. 我认为 Residuum 给出了正确答案,但您还没有意识到 :)
    • 感谢 Residuum。我这样做是因为我正在移植一个现有站点,其中一部分是从 db 动态构建的链接目录,以将数百个目录减少到一个文件。所以你建议的是我尝试的第一件事,但我错过的是从 example.com/seg1/seg2 访问 seg2 并使用以下路由: $route['(:any)'] = 'a_controller/index /$1' 将是 $this->uri->segment(4) 而不是 $this->uri->segment(2) ,它不断返回“索引”。当我在 URI 中看到它们时,我期待访问它们。愚蠢的新手错误,谢谢你让我明白
    • ..我使用的是 rsegment 而不是段:p
    猜你喜欢
    • 1970-01-01
    • 2015-01-19
    • 1970-01-01
    • 2018-03-23
    • 1970-01-01
    • 2011-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多