Sinatra Url'/'解释

时间:2011-10-04 08:43:00

标签: ruby url sinatra

我是一个红宝石新手,并且一直在尝试Sinatra已经有一段时间了,我不知道的一件事是为什么网址中的'/'会产生如此大的差异。 我的意思是不:

get 'some_url' do 
end

get 'some_url/' do
end

假设指向同一条路线?为什么Sinatra认为它是不同的路线?我花了一个小时试图解决这个问题。

2 个答案:

答案 0 :(得分:2)

他们是不同的路线。第二个是带有目录扩展名('/')的URL;第一个是没有扩展名的URL。许多框架(如Rails)将两者都解释为相同的路径,或者附加“/”(例如,Django,Apache也可以配置为执行此操作),但从技术上讲,它们是不同的URL。

答案 1 :(得分:2)

根据RFC 2616和RFC 2396(定义资源标识的RFC),这些URL不定义相同的资源。因此,Sinatra对待他们的方式不同。这是特别的。如果您想象返回具有相对链接的页面的路线,这很重要。这个链接

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

如果您来自/bar,则会指向/foo,如果您来自/foo/bar,则会指向/foo/

您可以使用以下语法定义匹配两者的路由:

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

或上面评论中提到的Regexp版本。