2010-05-20 91 views
0

我組建了一個短網址功能,爲應用我的工作,現在有工作,並通過編碼記錄指向長URL的ID base36轉向長URL轉換成短網址,例如:自定義Rails的路線查詢

http://localhost:3000/7ps - >http://localhost:3000/the/long/url

我很努力寫這將攔截的短URL請求,而在應用其他有效的網址仍然允許請求的路徑。

是否有一個我可以使用的路線,它只會在域之後定位base36編碼值?

感謝您的幫助!

回答

2

您可以添加:

map.encoded ":encoded_url", :controller => :encoded_urls, :action => :please_decode_me 

在你的路由結束。然後它應該抓住所有其他路線未能捕捉到的東西。

+0

這是要失敗的(在邏輯錯誤類別-方式)對我在答覆中指出的原因。 – jdl 2010-05-20 21:21:57

+0

@jdl:在創建新的編碼網址期間,他可以檢查禁止出現的單詞。這不是最好的解決方案,但它會起作用。 – klew 2010-05-20 21:45:29

+0

當然。然後在每次需要添加新控制器時檢查現有短URL的列表。它可以工作,但很難維護,失敗將會保持沉默。 – jdl 2010-05-20 21:58:54

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"