带有 SEO url 动态参数的 Codeigniter 4 默认路由

Codeigniter 4 default routing with dynamic arguments for SEO url's

我正在 Codeigniter 4 中开发 CMS,我 运行 遇到了一些我无法解决的路由问题。

我想在前端使用 SEO url,因此我需要将所有流量重定向到一个具有零个或多个参数的方法。除了可以定向到现有控制器的调用。无需在我的系统中设置所有可能的路线。

例如

website.local/survival/weeks > Should redirect to the default controller method passing 2 arguments

website.local/ > Should also redirect to the default controller method passing no arguments

但是

website.local/admin/pages/page/1 > Should direct to the existing method

我已经创建了默认方法

<?php namespace App\Controllers;

class Pages extends BaseController
{
    public function index()
    {
        $args = func_get_args();
        dd($args);
    }

在 config/Routes.php 我已经试过了

// We get a performance increase by specifying the default
// route since we don't have to scan directories.
$routes->get('/', 'Pages::index');

这会起作用,除非我传递参数时它重定向到 404

我也试过这个

$routes->get('(:any)', 'Pages::index/');

但是现在我没有在路由中定义的所有内容也将被定向到我的默认方法

然后我尝试将 404 页面覆盖为我的默认方法,如下所示:

$routes->set404Override('App\Controllers\Pages::index');

但我似乎无法通过这种方式传递参数。

有谁知道如何在不更改系统文件或不必为系统中的每个方法设置路由的情况下执行此操作?

Routes.php 中将 404 重写设置为应该捕获所有的方法:

$routes->set404Override('App\Controllers\Pages::index');

然后在方法中像这样检索 URI 段:

<?php namespace App\Controllers;

class Pages extends BaseController
{
    public function index()
    {
        $args = $this->request->uri->getSegments();
        dd($args);
    }

}

现在如果找不到页面,您可以从那里显示 404。