Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Codeigniter 2控制器掉到另一个控制器_Php_Codeigniter_Codeigniter 2 - Fatal编程技术网

Php Codeigniter 2控制器掉到另一个控制器

Php Codeigniter 2控制器掉到另一个控制器,php,codeigniter,codeigniter-2,Php,Codeigniter,Codeigniter 2,我有一个网站,它的URL结构如下: example.com/category-name $route['(:any)'] = 'new_controller/load/$1 $route['default_controller'] = "pages"; 目前,这是一个1000行长的控制器,名为pages,它是多年前构建的,从未更改过。我正在路线上方插入一个新控制器,如下所示: example.com/category-name $route['(:any)'] = 'new_control

我有一个网站,它的URL结构如下:

example.com/category-name
$route['(:any)'] = 'new_controller/load/$1
$route['default_controller'] = "pages";
目前,这是一个1000行长的控制器,名为pages,它是多年前构建的,从未更改过。我正在路线上方插入一个新控制器,如下所示:

example.com/category-name
$route['(:any)'] = 'new_controller/load/$1
$route['default_controller'] = "pages";
想法是让
新的\u控制器
像这样工作:

example.com/page-name
这将在数据库中查找
页面名称
,并在网站管理员中显示一些由业务人员制作的文本

问题在于,如果在此表中未找到
页面名称
,出于旧版目的,我必须通过
新建\u控制器/加载
,然后正常使用页面控制器

由于SEO原因,我无法更改URL结构,它必须保持
example.com/category name
,他们希望它共享相同的URL结构
example.com/page name
,因为它较短(我试图说服他们做类似
example.com/page/page name

new\u controller/load/$1
如何调用say
pages/view/$1


提前谢谢,这真的可以帮我节省工作时间哈哈

在你的
路线配置中
你可以使用下面的配置。新的控制器处理所有页面请求,只要它们的URI不包含
页面/view/*
哪个
页面
控制器处理

$route['pages\/view\/(.*)'] = 'pages/view/$1';
$route['(?!pages\/view)(.*)'] = 'new_controller/load/$1';
new_controller
controller-您可以执行类似于下面代码的操作,因此,如果slug不存在于数据库中,它将由
pages
controller处理

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.
        }
}

我担心重定向会成为一个SEO问题,如果它每次在新控制器中不匹配时都会看到重定向,这可能会损害SEO,其他的重定向很有趣,我会尝试一下,看看会发生什么。对于那些稍后阅读本文的人,我基本上同意上面的答案,但由于需要其他非数据库驱动的路由,我使用了switch/case,而不是if/else。