我是一名紅寶石新手,一直在嘗試Sinatra相當長一段時間,Iam無法弄清楚的一件事是爲什麼URL中的'/'會產生如此大的差異。 我的意思是心不是:Sinatra Url'/'詮釋
get 'some_url' do
end
和
get 'some_url/' do
end
應該指向同樣的路線?爲什麼西納特拉認爲它是不同的路線?我花了一個小時試圖弄清楚。
我是一名紅寶石新手,一直在嘗試Sinatra相當長一段時間,Iam無法弄清楚的一件事是爲什麼URL中的'/'會產生如此大的差異。 我的意思是心不是:Sinatra Url'/'詮釋
get 'some_url' do
end
和
get 'some_url/' do
end
應該指向同樣的路線?爲什麼西納特拉認爲它是不同的路線?我花了一個小時試圖弄清楚。
根據RFC 2616和RFC 2396(定義資源標識的RFC),這些URL不定義相同的資源。因此Sinatra對待它們的方式不同。這是特別的。如果您想象路線返回帶有相關鏈接的頁面,這一點很重要。如果你從/foo
的到來,給/foo/bar
如果你從/foo/
來此鏈接
<a href="bar">click me</a>
將指向/bar
。
您可以使用下面的語法定義都匹配的路由:
get '/foo/?' do
# ...
end
或以上的評論中提到的正則表達式版本。
他們是不同的路線。第二個是帶有目錄擴展名('/')的URL;第一個是沒有擴展名的網址。很多框架(比如Rails)會將兩者解釋爲相同的路由,或者附加`/'(例如,Django,Apache也可以配置爲這樣做),但從技術上講,它們是不同的URL。
我不知道爲什麼Sinatra認爲它不同的路線,但有簡單的解決方法:'get%r {some_url \ /?} do'。令人驚訝的是,即使這樣做:'get%r {some_url}做'。 –
謝謝你的幫助 – djd