Sinatra Url'/'诠释

问题描述:

我是一名红宝石新手,一直在尝试Sinatra相当长一段时间,Iam无法弄清楚的一件事是为什么URL中的'/'会产生如此大的差异。 我的意思是心不是:Sinatra Url'/'诠释

get 'some_url' do 
end 

get 'some_url/' do 
end 

应该指向同样的路线?为什么西纳特拉认为它是不同的路线?我花了一个小时试图弄清楚。

+1

我不知道为什么Sinatra认为它不同的路线,但有简单的解决方法:'get%r {some_url \ /?} do'。令人惊讶的是,即使这样做:'get%r {some_url}做'。 –

+0

谢谢你的帮助 – djd

根据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。