0

我正在尝试为带有 h​​ttp://www.example.com/about 之类的网址的网站创建默认页面控制器。因此,如果没有“关于”控制器,则在数据库中查找具有该 url 字符串的页面。

我已将 404_override 设置为我的“页面”控制器,并使用 _remap() 函数来确定下一步要去哪里,加载主页(页面控制器的 index() 方法)或加载页面。

但是,就目前而言,如果我使用不同的控制器(在本例中为产品)和路径中的方法(http://www.example.com/product/widget,它不存在),我正在为页面控制器的 index() 方法提供服务。

我认为问题出在我检查请求的页面是否是我的 _remap() 中的主页的方式上,所以我在我的重映射的开头添加了一个回显,看看它是否重要。_remap() 似乎没有被调用。相反,在尝试处理 404_override CI 时,只显示索引方法。

有什么想法可以让我更有效地做到这一点吗?

    public function _remap($method)
{
    echo 'Method '.$method;
    if($this->uri->segment(1) == null)
    {
        // $this->index();
    } else {
        $this->view();
    };
}
4

1 回答 1

0

我似乎在这篇博文中找到了一个可行的解决方案:http: //pinoytech.org/blog/post/codeigniter-route-everything-except-these-controllers

在路由定义中使用正则表达式允许忽略其他控制器(产品、订单等),同时仍将其他所有内容发送到页面控制器。

$route['^(?!product|order|misc_controller)\S*'] = "page/$1";

尚未对其进行测试,但据我所知,它应该可以正常工作。

于 2012-05-27T00:53:58.783 回答