我使用CodeIgniter创建了一种CMS。它根据URL参数中传递的slug
文本加载来自数据库的页面内容,例如:关于,服务,联系。
在控制器代码中,我重新映射了索引方法,将slug作为参数,因为默认索引方法不允许参数。
请在以下链接中查看我的page
控制器的代码:
这样做的方法是,我将page
控制器设置为默认加载。所以每次我打开这样的网站
它像这样加载控制器
如果我们将slug传递给它,它会从数据库加载该slug的页面内容,就像这样
http://www.mysite.com/page/about http://www.mysite.com/page/portfolio
如果我们没有通过slug,它会加载主页。
现在我想做的是,我不希望这个“页面”文本显示在URL中。所以页面应该像这样打开
http://www.mysite.com/portfolio
我想这可以通过URL重写来实现。
我已经完成了从URL中删除index.php
的URL重写,这通常是针对所有Codeigniter网站完成的。下面是我的.htaccess文件的代码
RewriteEngine on
RewriteCond $1 !^(index\.php|uploads|fckeditor|assets|robots\.txt)
RewriteRule ^(.*)$ /jobsite/index.php/$1 [L]
现在的问题是,如何让URL像这样工作
http://www.mysite.com/portfolio
先谢谢。
答案 0 :(得分:3)
只需将其添加到config / routes.php文件中:
$route[':any'] = 'your_controller';
然后在* your_controller *中,您可以使用以下命令访问URI段:
$this->uri->segment(1);
获得URI段后,您可以在数据库中查询它并将数据发送到您的视图。如果URI段为空,请加载主页。
答案 1 :(得分:0)
好的,所以我要做的就是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";
我在编写复杂网站或使用网址过多时通常会考虑的另一件事是将管理员放在单独的主机上。 您为公共方保留“www.myhost.com”,并使用“admin.myhost.com”作为管理部分。当然,它需要2个CI安装和一些模型重复,但它可以节省时间并提高安全性。