我是一个红宝石新手,并且一直在尝试Sinatra已经有一段时间了,我不知道的一件事是为什么网址中的'/'会产生如此大的差异。 我的意思是不:
get 'some_url' do
end
和
get 'some_url/' do
end
假设指向同一条路线?为什么Sinatra认为它是不同的路线?我花了一个小时试图解决这个问题。
答案 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版本。