[英]Codeigniter 2 Controller Fall Through to a different controller
我有一個正在處理的網站,其網址結構如下:
example.com/category-name
目前,它使用了1000行長的控制器,稱為頁面,該控制器是幾年前構建的,從未更改過。 我在路由上方插入一個新的控制器,如下所示:
$route['(:any)'] = 'new_controller/load/$1
$route['default_controller'] = "pages";
這個想法是使new_controller
像這樣工作:
example.com/page-name
這將在數據庫中查找page-name
,並在網站管理員中顯示一些由商人撰寫的文本。
問題出在如果在此表中找不到page-name
,出於遺留目的,我必須通過new_controller/load
,然后正常使用pages控制器。
出於SEO的原因,我無法更改URL結構,它必須保留example.com/category-name
並且他們希望它共享相同的URL結構example.com/page-name
因為它更短(我試圖說服他們做類似example.com/page/page-name
)
從new_controller/load/$1
然后我該如何稱pages/view/$1
?
在此先謝謝你,這真的可以節省我的工作量哈哈
在您的route config
您可以使用以下配置。 new_controller控制器處理所有頁面請求,只要它們的uri不包含pages
控制器處理的pages/view/.*
。
$route['pages\/view\/(.*)'] = 'pages/view/$1';
$route['(?!pages\/view)(.*)'] = 'new_controller/load/$1';
在new_controller
控制器中,您可以執行類似以下代碼的操作,因此,如果數據庫中不存在該塊,則將由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.
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.