如何使用Codeigniter控制器加载页面


How can I load a Page using Codeigniter controller?

我使用CodeIgniter制作了一种CMS。它根据URL参数中传递的slug文本从数据库加载页面内容,例如about、services、contact。

在控制器代码中,我重新映射了index方法,将slug作为参数,因为默认索引方法不允许使用参数。在下面的链接上检查我的page控制器的代码:

http://pastebin.com/MwsVzRwQ

工作方式是,我已经将page控制器设置为默认加载。所以每次我打开我的网站像这个

http://www.mysite.com

它像这个一样加载控制器

http://www.mysite.com/page

如果我们将段塞传递给它,它会从数据库中加载该段塞的页面内容,比如这个

http://www.mysite.com/page/abouthttp://www.mysite.com/page/portfolio

如果我们不通过slug,它就会加载主页。

现在我想做的是,我不希望这个"页面"文本出现在URL中。所以页面应该像这样打开

http://www.mysite.com/about

http://www.mysite.com/portfolio

我想这将有可能通过URL重写。我已经完成了从URL中删除index.php的URL重写,这通常适用于所有Codeigner网站。下面是我的.htaccess文件的代码

RewriteEngine on
RewriteCond $1 !^(index'.php|uploads|fckeditor|assets|robots'.txt)
RewriteRule ^(.*)$ /jobsite/index.php/$1 [L]

现在的问题是,我如何使URL像一样工作

http://www.mysite.com/about

http://www.mysite.com/portfolio

提前感谢。

只需将其添加到config/routes.php文件中即可:

$route[':any'] = 'your_controller';

然后在*your_controller*中,您可以使用访问URI段

$this->uri->segment(1);

一旦有了URI段,就可以在DB中查询它,并将数据发送到视图中。如果URI段为空,则加载主页。

好的,所以我要做的是yRosen的建议,有一点不同,按照正确的顺序:

首先是你的管理员,然后是其他一切:

$route['admin_panel/user_manager/(:any)'] = "admin_panel/user_manager/$1";
$route['admin_panel/pages_manager/(:any)'] = "admin_panel/pages_manager/$1";
$route['admin_panel'] = "admin_panel";
$route['(:any)'] = "pages/$1";

当制作一个复杂的网站或玩太多url时,我通常会考虑的另一件事是将管理员放在一个单独的主机上。您为公共端保留"www.myhost.com",并使用"admin.myhost.com"作为管理部分。当然,它需要2个CI安装和一点模型复制,但它可以节省时间并提高安全性。