我使用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安装和一点模型复制,但它可以节省时间并提高安全性。