2013-04-21 98 views
0

我有一个简单的问题,但我无法弄清楚。我写了一个方法,它从url中读取参数(一个参数是用户名),并将所有数据查询到该用户并将其显示在页面中。用户配置文件路由配置codeigniter

唯一的问题是,该方法是控制器的一部分,自然也有在URL中显示(这简直是说:不要太漂亮分享我也有写的字符串,如下所示:

www.domain.com/controller/profile_guest?user=username 

我想摆脱一切就是用户名之前所以为它显示为:。

www.domain.com/username 

现在有两种方案在这里介绍

一)有人b对目录进行排序,单击配置文件名称,然后重定向到配置文件页面。一旦他喜欢他所看到的内容,他就会复制网址并分享它。

b)有人收到共享链接并点击它,那么应该加载的是带有他收到的url的个人资料页面,而不是完整的显示控制器和方法的页面。

这是可能实现的吗?

感谢您的帮助:)

更新:

$route['default_controller'] = "main/index"; 
$route['404_override'] = ''; 
+0

是与路线是可能的。请阅读手册中的本节http://ellislab.com/codeigniter/user-guide/general/routing.html – 2013-04-21 13:17:34

+0

使用'404_override'功能。简而言之,如果任何人访问的URL并未在CodeIgniter中路由/映射,它将调用您在“404_override”中放置的任何控制器/操作。从这里,你可以简单地阅读他们试图阅读的用户名并显示适当的页面。 – Gavin 2013-04-22 08:48:35

回答

1

你可以使用这条路线:

$route['(:any)'] = "controller/profile_guest/$1"; 

但任何其他途径,你需要将它手动编写高于此路线。 例如:

$route['controller/view'] = "controller/view"; 
$route['(:any)'] = "controller/profile_guest/$1"; 

解释:

路由是按照它们出现在您的routes.php文件的文件,所以如果你把$route['(:any)']在顶部,它会处理任何事情的顺序处理。

假设你有一个位指示和里面的功能,你需要执行它,例如:www.domain.com/contoller/function,不要去碰执行你的功能,因为它会匹配这条路线$route['(:any)'],所以你需要定义的路由前$route['(:any)'] 例如:

$route['contoller/function'] = "controller/function" 
$route['(:any)'] = "controller/profile_guest/$1"; 

,做你所有的contollers,其功能同样的事情,但你必须把$route['(:any)']在最后的路线。

+0

我在routes.php上只有一个路由,它在上面有更新。你能否澄清你的意思? – 2013-04-21 14:54:48

+0

我编辑我的答案。 – 2013-04-21 15:31:38

+0

请注意,在CI 3。0+,':any'将*不匹配斜杠,所以它只适用于一个URI段。 – 2013-04-21 23:57:31