【问题标题】:Codeigniter URL route using 404_override使用 404_override 的 Codeigniter URL 路由
【发布时间】:2018-02-13 20:16:49
【问题描述】:

我有一个非常大的应用程序(许多控制器和模块),在应用程序中有文章(帖子),我想把 URL 像: example.com/[category_name]/[article_name] 即: example.com/gadgets/top-ten-coolest-gadgets-of-2018

我有一个名为 Content 的控制器,因此 URL 设置如下: example.com/content/[category_name]/[article_name]

我想从 URL 中删除 "/content/",所以,首先我尝试在 routes.php 中添加以下内容:

$ route ['(:any)/(:any)'] = '/content/categoryArticles/$1/$2';

但是其余的控制器停止工作,所以我不得不将它们全部添加到 routes.php 中(还有很多)。

我想在 URL 找不到控制器时尝试使用 404_override 作为默认路由并将所有重定向到 /content/categoryArticles 即,这样做:

route ['404_override'] = '/content/categoryArticles/'

并在 categoryArticles 函数中,将 URL 分段分解并确定参数。

这是个好习惯吗?

【问题讨论】:

    标签: php codeigniter routing


    【解决方案1】:

    更新答案:

    如果你使用 (:any) 作为你的第一个参数,那么所有的控制器/文件夹都会被路由覆盖。但是您可以先使用别名,然后使用以下参数,以免影响其他控制器。

    $routes['post/(:any)/(:any)'] = 'content/categoryArticles/$1/$2';
    

    除非您有一个固定的类别列表,否则您可以初始化这些类别,然后将其添加到路由中

    $categories = array('gadgets', 'review', 'news', 'sports', 'business');
    
    foreach ($categories as $category) {
        $route["{$category}/(:any)"] = "content/categoryArticles/{$category}/$1";
    }
    

    【讨论】:

    • Category 是个参数,不好意思,我觉得我解释的不是很好。我更新了问题以使其更清晰
    • 非常感谢您的帮助。我已经考虑过的那些选项,因为它本来就是这样。我需要从 URL 中删除 /content/ 或 /posts/,我的意思是,类别名称就像 URL 的第一个段元素。我认为能够做到这一点的唯一选择是默认使用 404_override 路由,但我不知道这是否是一个好习惯
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-13
    • 1970-01-01
    • 2017-09-22
    • 1970-01-01
    • 2013-06-14
    相关资源
    最近更新 更多