2011-10-04 88 views
5

我是一名紅寶石新手,一直在嘗試Sinatra相當長一段時間,Iam無法弄清楚的一件事是爲什麼URL中的'/'會產生如此大的差異。 我的意思是心不是:Sinatra Url'/'詮釋

get 'some_url' do 
end 

get 'some_url/' do 
end 

應該指向同樣的路線?爲什麼西納特拉認爲它是不同的路線?我花了一個小時試圖弄清楚。

+1

我不知道爲什麼Sinatra認爲它不同的路線,但有簡單的解決方法:'get%r {some_url \ /?} do'。令人驚訝的是,即使這樣做:'get%r {some_url}做'。 –

+0

謝謝你的幫助 – djd

回答

2

根據RFC 2616和RFC 2396(定義資源標識的RFC),這些URL不定義相同的資源。因此Sinatra對待它們的方式不同。這是特別的。如果您想象路線返回帶有相關鏈接的頁面,這一點很重要。如果你從/foo的到來,給/foo/bar如果你從/foo/來此鏈接

<a href="bar">click me</a> 

將指向/bar

您可以使用下面的語法定義都匹配的路由:

get '/foo/?' do 
    # ... 
end 

或以上的評論中提到的正則表達式版本。

2

他們是不同的路線。第二個是帶有目錄擴展名('/')的URL;第一個是沒有擴展名的網址。很多框架(比如Rails)會將兩者解釋爲相同的路由,或者附加`/'(例如,Django,Apache也可以配置爲這樣做),但從技術上講,它們是不同的URL。