我尝试使用http://www.example.com/about等网址为网站创建默认网页控制器。所以,如果没有'关于'控制器,然后在数据库中查找包含该url字符串的页面。
我已将404_override设置为我的'页面'控制器和我使用_remap()函数来确定下一步,加载主页(页面控制器的索引()方法)或加载页面。
然而,如果我在路径中使用不同的控制器(在这种情况下为产品)和方法(http://www.example.com/product/widget,它不是现在)存在)我正在服务于页面控制器的index()方法。
我认为问题来自于我检查所请求的页面是否是我的_remap()中的主页的方式,所以我在重新映射的开头添加了一个echo以查看它是否重要。 _remap()似乎没有被调用。相反,在尝试处理404_override CI时,只显示索引方法。
我有什么想法可以更有效地完成这项工作?
public function _remap($method)
{
echo 'Method '.$method;
if($this->uri->segment(1) == null)
{
// $this->index();
} else {
$this->view();
};
}
答案 0 :(得分:0)
我似乎在这篇博文中找到了一个可行的解决方案:http://pinoytech.org/blog/post/codeigniter-route-everything-except-these-controllers
在路由定义中使用正则表达式允许忽略其他控制器(产品,订单等),同时仍将其他所有内容发送到页面控制器。
$route['^(?!product|order|misc_controller)\S*'] = "page/$1";
还没有测试过,但据我所知它应该可以游泳。