Sinatra Url'/'解释

djd*_*djd 5 ruby url sinatra

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

get 'some_url' do 
end
Run Code Online (Sandbox Code Playgroud)

get 'some_url/' do
end
Run Code Online (Sandbox Code Playgroud)

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

Kon*_*ase 2

根据 RFC 2616 和 RFC 2396(定义资源标识的 RFC),这些 URL 不定义相同的资源。因此西纳特拉对他们区别对待。这是特别是。如果您想象路由返回带有相关链接的页面,则这一点很重要。这个链接

<a href="bar">click me</a>
Run Code Online (Sandbox Code Playgroud)

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

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

get '/foo/?' do
  # ...
end
Run Code Online (Sandbox Code Playgroud)

或者上面评论中提到的正则表达式版本。