Codeigniter:将与控制器名称不匹配的所有请求发送到默认控制器

cbr*_*ino 3 php model-view-controller codeigniter url-routing codeigniter-url

我正在开发一个涉及两种URL的项目,一种遵循标准CI模式

http://fancysite.com/controller/
Run Code Online (Sandbox Code Playgroud)

另一个提出以下方案:

http://fancysite.com/category
Run Code Online (Sandbox Code Playgroud)

我希望第二个调用默认控制器handlecategory(或类似的东西)函数category作为参数.

如果您还可以告诉我如何让像http://place.fancysite.com/这样的网址调用相同的函数place作为参数传递,如果没有类别跟随该URL,或两者都是如此place,category如果它确实如此.

附加数据:我已经知道所有控制器,地点,类别的名称.

Alp*_*esh 6

您可以使用codeigniter的URI路由来实现此目的 -

将其插入路径文件的末尾 -

$route[':any'] = 'path of the default controller';
Run Code Online (Sandbox Code Playgroud)

所有其他路线应放在上面的代码上方.

让我们说URL codeigniter遇到的是 -

http://fancysite.com/category

首先,codeigniter将搜索是否存在名为category的控制器.如果它没有得到那么它将检查路由文件以检查是否有任何指定的路由 -

$route['category/:any'] = 'actual path';
Run Code Online (Sandbox Code Playgroud)

如果在这种情况下没有指定这样的路由,codeigniter会将此请求传递给您在最后一行路由中提到的默认控制器的路径.

即使链接包含子域也没关系,请求将转到相同的默认控制器.

现在,您可以为默认控制器中的子域处理或其他任何内容插入逻辑.

你甚至可以在我们使用codeigniters URI helper class 的URL中获取的url示例中获取参数'category',如下所示 -

$this->uri->segment(1);
Run Code Online (Sandbox Code Playgroud)