Php Codeigniter到单个控制器的动态路由

Php Codeigniter到单个控制器的动态路由,php,codeigniter,content-management-system,custom-routes,Php,Codeigniter,Content Management System,Custom Routes,我知道这个问题已经以类似的方式被问过好几次了。然而,我正在努力寻找任何适合我的情况的答案。我主要从事微软的项目,并参与了这个项目,以便在危机期间提供帮助 情况是这样的 我们有一个客户,他有一个超过600个不同页面的网站。实际上,每个页面都使用相同的模板,只是填充了不同的数据。我们已经为他开发了一个CMS,允许他随意创建新页面 我的理想解决方案是将新创建的页面的名称存储在数据库中。 例如,新的页面1已经创建,现在存在于数据库中。现在,当我输入www.mysite.com/new_page_1时,需

我知道这个问题已经以类似的方式被问过好几次了。然而,我正在努力寻找任何适合我的情况的答案。我主要从事微软的项目,并参与了这个项目,以便在危机期间提供帮助

情况是这样的

我们有一个客户,他有一个超过600个不同页面的网站。实际上,每个页面都使用相同的模板,只是填充了不同的数据。我们已经为他开发了一个CMS,允许他随意创建新页面

我的理想解决方案是将新创建的页面的名称存储在数据库中。 例如,新的页面1已经创建,现在存在于数据库中。现在,当我输入www.mysite.com/new_page_1时,需要转到一个查找“new_page_1”(在DB中)的控制器,如果它存在,则加载一个视图(该视图需要用于所有600页),然后从DB中获取其他数据并填充各个部分

因此,本质上,超过600多个页面需要使用相同的路由数组,并映射到相同的控制器,然后映射到相同的视图

我试过使用$route['(:any)]='custom_controller/create/$1和以及相同的数组键,但使用main和_remap。无论每次它都试图在我的视图中查找页面名称(它永远不会存在,因为我使用一个通用视图来查看600个页面)

关于如何实现这一点有什么想法吗

更新 routes.php(这是文件中的最后一行)

main.php(控制器)

}

我尝试的URL是sitename.servername.com/health sitename,显然已替换为servername

我得到的错误是

遇到错误


无法加载请求的文件:health/main/create.php

如果您告诉应用程序,它将只在视图中查找页面名称。您的catch-all控制器方法应该检查数据库中是否有有效的页面名称,然后无论验证哪些页面,都会加载相同的视图(尽管传递给视图的数据不同)


使用
(:any)
全包路线完全可以。某个地方的控制器代码让你不舒服。如果您继续挣扎,请用代码更新您的帖子。

您看到的错误页面是CodeIgniter错误模板还是一般服务器错误?这个错误字符串听起来很像您正在使用Apache或Nginx(或您使用的任何主要Web服务器),实际上它甚至根本没有解析到CodeIgniter应用程序,而是搜索一个不存在的PHP文件。您可能需要使用mod_rewrite或类似的工具,使该URL指向CodeIgniter安装


否则,您的实现看起来不会完全错误:您可能需要确保
main.php
也是默认路由。

可能就是这样,我相信我们使用的是Nginx。就像我说的,我不是这里的后端web人员,所以我对我们的web服务器甚至codeigniter都不太熟悉。明天我将不得不和我们的首席web开发人员讨论这个问题,看看他是否能找出为什么它指向一个不存在的文件。谢谢你的帮助!。实际上,在My_控制器文件中有一行代码迫使它使用uri的第一段作为类名,我把它取出来,现在它可以正常工作了。
$route['(:any)'] = "main/create/$1";
class Main extends MY_Controller {

public function __construct() {
    parent::__construct();
}
public function create($page)
{
    $c = new Category();
    $c->get_by_name(ucfirst($page));
    $this->load->view('site/index',$c);
}