使用404_override的Codeigniter URL路由

时间:2018-02-13 20:16:50

标签: php codeigniter routing

我有一个非常大的应用程序(许多控制器和模块),在应用程序中有文章(帖子),我想把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]

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

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

但其余的控制器停止工作,所以我不得不在routes.php中添加所有这些(并且有很多)。

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

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

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

这是一个很好的做法吗?

1 个答案:

答案 0 :(得分:0)

更新的答案:

如果您使用(: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";
}