我正在考虑为一个新项目定义Restful urls (使用Ruby On Rails开发)。我喜欢像"twitter.com/username“这样最著名的web2.0服务的简单和干净的urls。不谈路由配置中的问题(我想用没有使用脏的"map.connect“覆盖的资源来做这件事),真正的问题是:如何保留您想要用于页面的单词(例如: website.com/help、website.com/api等)?我不想考虑时间0的所有可能性(也是因为这是非常不可能的)。
发布于 2009-10-31 19:08:41
好吧,如果您想要安全起见-考虑为所有自定义内容添加一个前缀(map.with_options :prefix => 'do/'
),这样您的所有控制器/操作都将以如下形式作为前缀
http://example.com/do/:controller/:action/:whatever
因此,您只需阻止do
作为用户名,就可以自由地在该前缀之后执行任何您喜欢的操作。
发布于 2009-10-31 19:39:25
路由根据它们被声明的时刻来确定优先级。第一个匹配的声明路由将是已执行的路由。
所以,如果你有:
map.resources :users
map.profile ':nickname', :controller => 'users', :action => 'show'
如果您转到/users
,您将使用map.resources :users
路由,因为它是第一个匹配的路由。
当您转到/zetarun
时,您将被路由到map.profile ':nickname', :controller => 'users', :action => 'show'
,因为这是第一个匹配的路由。
然后,对于用户配置文件,您可以执行以下操作:
在所有控制器的路由中定义所有资源。
在资源的末尾,添加用户配置文件资源。
因此,当前缀被控制器使用时,它首先被任何存在的路由路由。
并且仅为用户简档保留未路由的url。
别忘了在用户注册中添加一个“保留昵称”验证,以避免有人使用一个不会给他提供个人资料的昵称,因为这个url上还有其他东西。
https://stackoverflow.com/questions/1654065
复制相似问题