Codeigniter:我想为用户创建用户名时创建用户URL

时间:2011-01-08 07:12:48

标签: php mysql codeigniter codeigniter-routing

我想在用户注册用户名时为其创建此类网址 mysite.com/username

我在这个网站上搜索了很多帖子,我看到人们这样做就是这样的mysite.com/user/username

我想摆脱用户,直接转到mysite.com/username

最好的方法是什么?

3 个答案:

答案 0 :(得分:5)

您可以查看路线:

http://codeigniter.com/user_guide/general/routing.html

您将路由输入config / routes.php

举个例子:

$route['([a-zA-Z]+)'] = "main_controller/user_function/$1";

但正如@Nylon Smile上面所述,如果您尝试使用注销,它将尝试访问注销的用户页面。

答案 1 :(得分:2)

我不熟悉CodeIgniter,但这里是人们不使用mysite.com/username的一般答案:

mysite.com/user/username是一个很好的解决方案,因为通常URL调度程序会将用户名传递给处理用户页面的函数/模块。

mysite.com/username是一个糟糕的解决方案,因为您的调度程序必须在所有其他规则之后有一个贪婪的规则,以将那些先前规则之外的所有规则传递给处理用户页面的模块/函数。

现在假设你想使用mysite.com/username,并假设你有mysite.com/logout将用户登陆到注销页面。用户来自注册自己的“注销”作为他的用户名。那你怎么说通过访问mysite.com/logout先生注销想要注销或想看到他的页面?

答案 2 :(得分:2)

你可以通过在'config / routes.php'中的$ route数组中添加一个项来实现这个目的:

$route['([a-zA-Z0-9_-]+)'] = "user/index/$1";

这将example.com/wif映射到'用户'控制器的'索引'功能。

是的,如果您有'注销'控制器和名为'注销'的用户,则会发生冲突。您可以通过在上面的之前将以下项添加到$ route数组来解决此问题:

$route['logout'] = "logout";

并保留包含控制器的用户名黑名单。这需要一些维护,因此您可能希望使用此处列出的其他解决方案,在其用户名之前在URL中添加类似“user /”的内容,并避免所有这些。