2011-10-04 15 views
5

Soy un novato de rubí y he estado probando Sinatra desde hace bastante tiempo, una cosa que no puedo entender es por qué un '/' en la url hace una gran diferencia. quiero decir isnt:Sinatra Url '/' interpretaciones

get 'some_url' do 
end 

y

get 'some_url/' do 
end 

Supone que apunte a la misma ruta? ¿Por qué Sinatra lo considera como rutas diferentes? Pasé una buena hora tratando de resolver eso.

+1

No sé por qué Sinatra considera diferentes rutas, pero hay una solución simple: 'obtener% r {some_url \ /?} Do'. Sorprendentemente, incluso esto funciona: 'obtener% r {some_url} do'. –

+0

Gracias que ayuda – djd

Respuesta

2

Según RFC 2616 y RFC 2396 (RFC que definen la identidad del recurso) esas URL no definen el mismo recurso. Por lo tanto, Sinatra los trata de manera diferente. Esto es especialmente importante si imagina la ruta devolviendo una página con enlaces relativos. Este enlace

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

apuntaría a /bar si viene desde /foo, a /foo/bar si viene desde /foo/.

Usted puede usar la siguiente sintaxis para definir una ruta coincidente tanto:

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

o la versión Regexp mencionado en los comentarios anteriores.

2

Son rutas diferentes. El segundo es una URL con una extensión de directorio ('/'); el primero es una URL sin extensión. Muchos frameworks (como Rails) interpretarán ambos como la misma ruta, o anexar el `/ '(por ejemplo, Django y Apache se pueden configurar para hacer eso también), pero técnicamente son URL diferentes.