Codeigniter URL 问题
Posted
技术标签:
【中文标题】Codeigniter URL 问题【英文标题】:Codeigniter URL question 【发布时间】:2011-09-11 18:36:55 【问题描述】:有什么方法可以制作用户网址吗?像
www.domain.com/用户名
我知道我可能必须使用路由系统,而且我确实经常将它用于其他 URL 请求。但问题是,我需要用户名来动态创建用户配置文件(如果存在)。但是我还需要记住我的其他控制器类吗?
谢谢!
【问题讨论】:
【参考方案1】:我看到您意识到用户有可能通过创建匹配的用户名来跨过您的其他有效路线。
您可以尝试将所有请求路由为用户名,但为您的其他控制器(和其他有效路由)提供触发器:
// Route everything to users profile
$route['(:any)'] = 'users/profile/$1';
// Route all requests after "my_trigger" as normal
$route['my_trigger/(:any)'] = '$1';
*我不确定,但您可能需要在触发路由中附加更多/(:any)
s。
这意味着my_trigger
必须是无效的用户名,但会是唯一无效的用户名。
这个想法是所有非用户名请求必须以附加的“触发”段开头,否则将被视为用户名。所以/blog
现在必须用/trigger/blog
访问。
您当然可以对用户名做同样的事情,但最终会得到一个不太漂亮的 url,比如 /u/username
,或者使用像 ?u=username
这样的查询字符串。
另一种选择是专门将应该正常调用控制器的段列入白名单,并将它们从可用用户名中列入黑名单,同时通过用户控制器路由所有其他请求。
在任何情况下,如果用户名实际上不存在 - 您需要做出适当的响应,因此没有真正需要“动态”路由(即为每个用户创建路由)。
【讨论】:
你已经开始运行了吗?我很好奇,因为我从未真正使用过这种路由方法。这行得通吗?随意简单地投票,取消选中接受,然后将问题保留一两天 - 其他人可能有宝贵的意见。 顺便说一句,尝试在路由中使用正则表达式而不是:any
,这样会更有意义,并且会读取斜杠而不是丢弃它们。以上是关于Codeigniter URL 问题的主要内容,如果未能解决你的问题,请参考以下文章
codeigniter 中的友好 url,带有 url 中的变量