2011-10-04 21 views
5

Ben bir yakut acemi oldum ve uzun zamandır Sinatra'yı deniyorum, anlayamadığım bir şey, url'deki bir '/' neden bu kadar büyük bir fark yaratıyor.Sinatra Url '/' yorumlar

get 'some_url' do 
end 

ve

get 'some_url/' do 
end 

aynı rotaya işaret gerekiyordu: Ben isnt demek? Sinatra bunu neden farklı yollar olarak görüyor? Bunu anlamaya çalışmak için iyi bir saat geçirdim.

+1

Ben Sinatra farklı yolları dikkate neden bilmiyorum, ama basit bir çözüm vardır: '% r do' olsun {some_url \ /?}. Şaşırtıcı bir şekilde, bu bile çalışır: '% r {some_url} do' olsun. –

+0

yardımcı olmadığını teşekkür ederiz – djd

cevap

2

RFC 2616 ve RFC 2396'ya (kaynak kimliğini tanımlayan RFC'ler) göre, bu URL'ler aynı kaynağı tanımlamaz. Bu nedenle Sinatra onlara farklı davranır. Bu esp. rotayı göreli bağlantılar içeren bir sayfa döndürdüğünüzde önemli. Eğer /foo/ geliyorlar eğer /foo/bar için, /foo geliyorlar

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

Bu bağlantı /bar işaret ederim.

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

Veya yukarıda yorum olarak bahsedilen Normal İfade sürümü:

Her iki eşleşen bir rota tanımlamak için aşağıdaki sözdizimini kullanabilirsiniz.

2

Bunlar farklı yollar. İkincisi, bir dizin uzantısına sahip bir URL'dir ('/'); İlki, uzantı içermeyen bir URL. Pek çok çerçeve (Rails gibi) hem aynı rota olarak yorumlanacak veya `/ 'yi ekleyecektir (örneğin, Django ve Apache de bunu yapmak için yapılandırılabilir), ancak teknik olarak farklı URL'lerdir.