0

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

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

我想摆脱用户,直接访问 mysite.com/username

最好的方法是什么?

4

3 回答 3

5

您可以查看路线:

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

你在 config/routes.php 中输入路由

举个例子:

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

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

于 2011-01-08T08:00:26.340 回答
2

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

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

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

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

于 2011-01-08T07:58:30.730 回答
2

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

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

这会将 example.com/whatever 映射到“用户”控制器的“索引”功能。

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

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

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

于 2011-01-09T03:19:32.373 回答