Codeigniter 2 Controller Fall Through 到另一个控制器

Codeigniter 2 Controller Fall Through to a different controller

我正在开发的网站有一个 URL 结构,如下所示:

example.com/category-name

这目前转到一个名为页面的 1000 行长控制器,该控制器是几年前构建的,并且从未更改过。我在上面的路线中插入一个新控制器,如下所示:

$route['(:any)'] = 'new_controller/load/
$route['default_controller'] = "pages";

new_controller 的想法是这样工作的:

example.com/page-name

这会在数据库中查找 page-name 并在网站的管理员中显示业务人员制作的一些文本。

问题在于,如果在此 table 中找不到 page-name,出于遗留目的,我必须完成 new_controller/load,然后正常使用页面控制器。

出于 SEO 的原因,我无法更改 URL 结构,它必须保留 example.com/category-name 并且他们希望它共享相同的 URL 结构 example.com/page-name 因为它更短(我试图说服他们做类似 example.com/page/page-name 的事情)

new_controller/load/ 我怎么打电话说 pages/view/ ?

提前致谢,它将真正节省我的工作时间哈哈

在您的 route config 中,您可以使用下面的配置。 new_controller 控制器处理所有页面请求,只要它们的 uris 不包含 pages 控制器处理的 pages/view/.*

$route['pages\/view\/(.*)'] = 'pages/view/';
$route['(?!pages\/view)(.*)'] = 'new_controller/load/';

new_controller 控制器中 - 您可以执行类似下面代码的操作,因此如果数据库中不存在 slug,它将由 pages 控制器处理。

public function load($slug)
{
        if(/*slug in database*/){
            echo "Slug content from database";
        }
        else { // slug not in database

            redirect(site_url('pages/view/'.$slug)); // You can use this
            echo file_get_contents(site_url('pages/view/'.$slug)); // or this
            $this->load->view('pages_template'); // or this
            // or semething else.
        }
}