我有一些网站http://www.example.com
,我有一个控制器abc
,其中我有加载我的网站视图的方法index()。我已经将我的控制器abc
设置为默认控制器,这样当用户输入example.com
时,他可以直接看到视图。在任何情况下,我都无法更改此默认控制器。现在,我希望如果用户输入example.com/1234
,其中1234是配置文件编号,那么它应该显示该配置文件。如果它是example.com/5678
,那么它应该显示5678的配置文件。我面临的问题是,如果用户输入example.com/1234
,它将抛出404错误,因为我没有任何控制器1234,即使我在默认控制器的索引函数if($this->uri->segment(3) == True)
中进行了检查,它也会抛出404错误。如有任何帮助,我们将不胜感激。
在您的路由文件中添加此更改:
$route['(:any)'] = 'abc/index/$1';
然后在abc控制器中:
public function index($profile=NULL)
{
$profile = $this->uri->segment(1, 0);
echo($profile);// just for checking, of course, you will remove this later, + the rest of your code, related to user id
通常,URL字符串与其对应的控制器类/方法之间存在一对一的关系。在routes.php(config文件夹)中,您还可以更改default控制器和路由。阅读下面文档中的通配符(秒)更多信息请阅读文档
在config/hooks.php中创建pre_controller钩子。如果您还没有在config/config.php中启用钩子,请记住。
示例:
$hook['pre_controller'][] = array(
'class' => 'Thehook',
'function' => 'check_for_profile',
'filename' => 'thehook.php',
'filepath' => 'hooks'
);
然后在hook/thehook.php中创建挂钩方法check_for_profile()。该方法可以检查匹配的配置文件并相应地显示或重定向。如果没有找到匹配的配置文件,则可以调用show_404()方法。
这样,您现有的控制器/方法路径不受影响,并且所有路由都保持不变。
如果你在挂钩内重定向,请使用以下格式:
header("Location: controller/method");
而不是
redirect('controller/method');
因为后者将导致连续循环
Add-in routes.php
$route["(.*)"] = 'abc/userid/$1';
然后在主控制器abc中添加
public function userid()
{
$userid=$this->uri->segment(1);
echo ($userid);
}
现在您在这个函数中有了userid:)