我組建了一個短網址功能,爲應用我的工作,現在有工作,並通過編碼記錄指向長URL的ID base36轉向長URL轉換成短網址,例如:自定義Rails的路線查詢
http://localhost:3000/7ps - >http://localhost:3000/the/long/url
我很努力寫這將攔截的短URL請求,而在應用其他有效的網址仍然允許請求的路徑。
是否有一個我可以使用的路線,它只會在域之後定位base36編碼值?
感謝您的幫助!
我組建了一個短網址功能,爲應用我的工作,現在有工作,並通過編碼記錄指向長URL的ID base36轉向長URL轉換成短網址,例如:自定義Rails的路線查詢
http://localhost:3000/7ps - >http://localhost:3000/the/long/url
我很努力寫這將攔截的短URL請求,而在應用其他有效的網址仍然允許請求的路徑。
是否有一個我可以使用的路線,它只會在域之後定位base36編碼值?
感謝您的幫助!
您可以添加:
map.encoded ":encoded_url", :controller => :encoded_urls, :action => :please_decode_me
在你的路由結束。然後它應該抓住所有其他路線未能捕捉到的東西。
簡短的回答是「這取決於」。您可以在路線文件的末尾添加一條路線作爲全部。但是,如果您有任何真實路線只有一個字,這最終會失敗。
例如:如果你有一個看起來像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"
這是要失敗的(在邏輯錯誤類別-方式)對我在答覆中指出的原因。 – jdl 2010-05-20 21:21:57
@jdl:在創建新的編碼網址期間,他可以檢查禁止出現的單詞。這不是最好的解決方案,但它會起作用。 – klew 2010-05-20 21:45:29
當然。然後在每次需要添加新控制器時檢查現有短URL的列表。它可以工作,但很難維護,失敗將會保持沉默。 – jdl 2010-05-20 21:58:54