我想在用户注册用户名时为其创建此类网址 mysite.com/username
我在这个网站上搜索了很多帖子,我看到人们这样做就是这样的mysite.com/user/username
我想摆脱用户,直接转到mysite.com/username
最好的方法是什么?
答案 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 /”的内容,并避免所有这些。