Php Codeigniter 2控制器掉到另一个控制器
我有一个网站,它的URL结构如下: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
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
如何调用saypages/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。