【问题标题】:CodeIgniter, multiple possible segments in one routeCodeIgniter,一条路线中的多个可能段
【发布时间】:2011-08-31 23:54:42
【问题描述】:

好的,所以这个标题可能有点令人困惑。我想做的是捕获任何信息,如果在第一个 URI 段之后有任何信息,如果该段是特定的,并将其转发到另一个控制器。这是我的路线文件:

$route['default_controller'] = "main";
$route['404_override'] = '';
$route['testroute'] = "main";

所以,它现在的作用是,如果我访问 mydomain.com/testroute,它会向我显示默认页面,这是应该的。但是,我想要的是如果我去 mydomain.com/testroute/testmethod/ 其中 testmethod 是主控制器中的一个方法,我也希望它转发它。所以基本上我希望它路由到主控制器,无论在测试路由之后是否有更多段,但如果有的话,它们应该作为主控制器的方法调用传递。

【问题讨论】:

    标签: codeigniter routes


    【解决方案1】:

    只需捕获给定的参数并将其传递给控制器​​,例如像这样:

    $route['testroute/(:any)'] = "main/$1";
    

    (:any) 实际上可以捕获任何类型的字符串。还有其他选择器。有关此主题的更多信息,请访问here

    编辑(回答您的评论):

    如果你想要一个到主控制器的 index() 方法的通用路由,只需添加两个路由:

    $route['testroute'] = "main";
    $route['testroute/(:any)'] = "main/$1";
    

    【讨论】:

    • 是的。我试过了。问题是如果我只是去 testroute/ 之后没有任何段,我会得到 404。如果没有更多的段而不必声明单独的路线,有没有办法让它解析到 main 的索引?
    • 见上文,我编辑了答案。另外,我真的建议看一下 CI 手册中的文章,有很多方法可以制作路由(使用正则表达式和其他好东西)
    • 回复编辑:是的,我想这就是我必须做的,我只是想尽可能简单地尝试将其保持在一条路线上。
    • @LoneWolfPR。你想一直重定向到 index 方法吗?试试 $route['testroute/(:any)'] = "main/index/$1"; $1 将是 index 方法的第一个参数
    • @Ben 我猜他想要的是,如果在 testroute 之后给出一个参数,它应该路由到控制器中的特定操作,否则(即没有给出参数)它应该调用 index() 操作.
    【解决方案2】:

    呃,什么?这就是 CodeIgniter 的控制器的工作方式。给我们看一些代码?有什么不好的地方?

    您是否在 .htaccess 文件中配置了 URL 重写,因此您不需要 URL 中的 /index.php/testroute

    打开 .htaccess,如果您还没有重写此代码,请尝试以下代码:

    RewriteEngine on
    RewriteCond $1 !^(index\.php|robots\.txt)
    RewriteRule ^(.*)$ index.php/$1 [L]
    

    如果你还没有配置重写,那么没有它就无法工作^,但你可以像mydomain.com/path/to/ci/index.php/testroute/testmethod一样访问

    【讨论】:

    • @Ben 请刷新。请参阅我编辑了答案以包含更多信息以供尝试。
    • @Ben:你知道 CI 是如何工作的吗?它与 OP 默认要求的完全一样,除了添加 .htaccess 重写规则之外没有任何修改。你认为 OP 的要求是什么?
    • 他在问@Martin 想要回答什么
    • 这个站点大部分时间都会正常运行(将第一个段路由到与段同名的控制器)。但是,我有一些可能性,其中第一段基本上就像一个子站点,并且需要被路由回主控制器,将所有进一步的段传递给它。我的偏好是为每个子站点使用子域,但我的客户希望它是 mydomain.com/site1、mydomain.com/site2 等。因此 site1、site2 等调用需要路由回主控制器根据子网站,它将是不同的皮肤和一些不同的内容。
    • @LoneWolfPR:所以基本上只是正常事物之间的一个额外部分?
    猜你喜欢
    • 1970-01-01
    • 2013-11-23
    • 1970-01-01
    • 2023-03-27
    • 1970-01-01
    • 2014-04-21
    • 2014-12-15
    • 2011-11-17
    • 2015-02-23
    相关资源
    最近更新 更多