我正在为我正在处理的应用程序整理一个简短的URL功能,现在让它工作,并通过base36编码指向更长URL的记录的ID,将更长的URL转换为短URL,例如:
http://localhost:3000/7ps - > http://localhost:3000/the/long/url
我正在努力编写一条路线,拦截对短网址的请求,同时仍然允许在应用中请求其他有效网址。
我可以使用的路由只会定位域后的base36编码值吗?
感谢您的帮助!
答案 0 :(得分:2)
您可以添加:
map.encoded ":encoded_url", :controller => :encoded_urls, :action => :please_decode_me
在路线的尽头。然后它会抓住其他路线没有捕获的所有东西。
答案 1 :(得分:1)
简短的回答是“这取决于”。您可以在路径文件末尾添加路径作为全能。但是,如果您有任何一个字长的实际路线,这最终会失败。
例如:如果您的路径看起来像http://localhost:3000/home
那么?是home
页面还是对象#825062的短URL?您的应用中的任何单字路径都会出现此问题。
一个非常简单的方法是添加一个字符作为URI中的第一个目录。
http://localhost:3000/r/abc123
或者你想要的任何字母。然后,您可以轻松地将以/ r /开头的任何内容映射到短URL查找控制器。
map.connect "/r/:short_url", :controller => "controller_name", :action => "name_of_action_that_looks_up_short_urls"