Php 如何为Facebook(www.Facebook.com/username)等接入用户路由codeigniter路由

Php 如何为Facebook(www.Facebook.com/username)等接入用户路由codeigniter路由,php,codeigniter,codeigniter-routing,Php,Codeigniter,Codeigniter Routing,我使用codeigniter框架,默认情况下我加载我的站点控制器 $route['default_controller'] = "site"; 但是现在我想设置routes.php配置,这样我仍然可以像以前一样访问我的控制器,但是如果控制器doesent存在,那么我想运行users controller并检查它是否是昵称,以便显示用户配置文件 这有点像在Facebook上,你可以拥有www.Facebook.com/username,它会带你进入你的用户档案。但是我希望我的其他控制器仍然可以访

我使用codeigniter框架,默认情况下我加载我的站点控制器

$route['default_controller'] = "site";
但是现在我想设置routes.php配置,这样我仍然可以像以前一样访问我的控制器,但是如果控制器doesent存在,那么我想运行users controller并检查它是否是昵称,以便显示用户配置文件

这有点像在Facebook上,你可以拥有
www.Facebook.com/username
,它会带你进入你的用户档案。但是我希望我的其他控制器仍然可以访问
www.mysite.com/site
www.mysite.com/site/function
,等等

我尝试过:任何通配符,但都无法使用。我已经看到一些解决问题的正则表达式,但我不擅长正则表达式,不知道如何把它放在一起,所以它将为我工作

试试我的方法:

首先,为您拥有的每个控制器设置
$route
,exmp:

$route['controller_1'] = 'controller_1';
$route['controller_1/(:any)'] = 'controller_1/$1'; //this let you access your method
$route['controller_2'] = 'controller_2';
$route['controller_2/(:any)'] = 'controller_2/$1'; //this let you access your method
接下来,使用
:any

$route['(:any)'] = 'user_controller/$1';

祝你好运

这样试试。如果你有很多控制器,它会减少很多重复的线路,但我不知道它是否违反了任何CI规则

//this code block should be placed after any kind of reserved routes config
$url_parts = explode('/',strtolower( $_SERVER['REQUEST_URI']) );
$reserved_routes = array("controller_1", "controller_2", "controller_3" );
if (!in_array($url_parts[1], $reserved_routes)) {    
    $route['([a-zA-Z0-9_-]+)'] = "controller_1/profile/$1";
}

然后,您的默认url将是
domain/site/userid
,只需使用匹配模式并将
domain/userid
映射到
domain/site/userid
路由即可。这样,您可以调用
域/1
,在后台CI将使用该id调用site
controller>show
。。。这个概念很好,但它不允许我访问controller_1/method_1它只访问controller_1或controller_2但没有方法的控制器,但我在这些控制器中有很多方法。那么还有其他解决方案吗?刚刚编辑了我的答案,现在你可以访问“controller_1/method_1”。是的,这解决了我的问题,但有时我在url中也有像controller_1/method_1/id这样的id,你的更新会用这个吗?或者我必须添加$route['controller_1/(:any)/(:any)]='controller_1/$1/$2'?不,你不必,我的回答就够了。我在我的手机上测试过,你也可以在你的手机上测试。