Php Codeigniter:我想创建用户URL';当我的用户创建用户名时,为他们设置

Php Codeigniter:我想创建用户URL';当我的用户创建用户名时,为他们设置,php,mysql,codeigniter,codeigniter-routing,Php,Mysql,Codeigniter,Codeigniter Routing,我想在我的用户注册用户名时为他们创建这种URL mysite.com/username 我在这个网站上搜索了很多帖子,我看到人们这样做:mysite.com/user/username 我想摆脱这个用户,直接把它转到mysite.com/username 最好的解决方法是什么?我不熟悉CodeIgniter,但下面是一个关于为什么人们不使用mysite.com/username的一般答案: mysite.com/user/username是一个很好的解决方案,因为URL调度器通常会将用户名传递给

我想在我的用户注册用户名时为他们创建这种URL mysite.com/username

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

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


最好的解决方法是什么?

我不熟悉CodeIgniter,但下面是一个关于为什么人们不使用mysite.com/username的一般答案:

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

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


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

你可以查看路线:

您可以在config/routes.php中输入路由

例如:

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

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

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

$route['([a-zA-Z0-9_-]+)'] = "user/index/$1";
这将example.com/whatever映射到“用户”控制器的“索引”功能

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

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

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

我完全明白Nylon的意思,所以如果我使用mysite.com/user/username,会不会有办法更改URL路径,以便显示mysite.com/username,用户可以键入这些内容来访问他们的个人资料页面?我想这正是我所要求的:如果我错了,请纠正我是的,这几乎是一样的。但按照我的方式,它将确保只拾取第一段,因为它只接受字母字符。没有符号。您也可以随时添加数字。这取决于你的处境,我完全理解你。必须有一个解决方案,我的网站是用原始php构建的,在我失去它之前,这就是访问配置文件的方式,但我从来没有遇到过问题。嗯,我不知道怎么避开这个。如果我保留了不能注册的名字怎么办?顺便说一句,用户注册时要注明姓名、电子邮件地址、密码、性别和出生日期。一旦他们进入会员区,用户名选项就可用,他们可以立即选择一个并分配给他们的帐户。如果你真的想要mysite.com/username,那么这个解决方案将适用于你。正如你所说的,即使你不保留用户名,有人创建一个奇怪用户名的可能性也很小。但我仍然坚持认为这不是最佳做法。将注销作为子域(例如,每个控制器的logout.mystie.comA子域)使用如何似乎是一个大麻烦。