2011-10-04 2 views
5

나는 루비 초보자이며 꽤 많은 시간 동안 Sinatra를 시도 해왔다. Iam이 알아낼 수없는 한 가지는 url에서 '/'가 그렇게 큰 차이를 만드는 이유이다.Sinatra Url '/'interpret

get 'some_url' do 
end 

get 'some_url/' do 
end 

이 동일한 경로를 가리 가정 : 나는 밤은 말은? 왜 Sinatra는 그것을 다른 루트라고 생각합니까? 나는 그걸 알아 내려고 좋은 1 시간을 보냈다.

+1

Sinatra가 다른 경로로 생각하는 이유를 모르지만 간단한 해결 방법이 있습니다.'get % r {some_url \ /?} do'. 놀랍게도, 이것조차도 작동합니다 :'get % r {some_url} do'. –

+0

도움을 주셔서 감사합니다. – djd

답변

2

RFC 2616 및 RFC 2396 (리소스 ID를 정의하는 RFC)에 따르면 해당 URL은 동일한 리소스를 정의하지 않습니다. 그러므로시나 트라는 그것들을 다르게 취급합니다. 이것은 특히 그렇습니다. 상대 링크가있는 페이지를 반환하는 경로를 상상하는 경우 중요합니다. 당신이 /foo/에서오고있어 경우 /foo/bar에, /foo에서 오는하는 경우

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

이 링크는 /bar를 가리겠습니까.

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

또는 위의 의견에 언급 된 정규 표현식 버전 :

당신은 모두 일치하는 경로를 정의하려면 다음 구문을 사용할 수 있습니다.

2

다른 경로입니다. 두 번째는 디렉토리 확장자 ('/')가있는 URL입니다. 첫 번째는 확장자가없는 URL입니다. Rails와 같은 많은 프레임 워크는 두 경로를 같은 경로로 해석하거나`/ '를 추가합니다 (예 : Django와 Apache도이를 구성 할 수 있습니다). 그러나 기술적으로는 다른 URL입니다.