Sinatra Url'/'诠释
问题描述:
我是一名红宝石新手,一直在尝试Sinatra相当长一段时间,Iam无法弄清楚的一件事是为什么URL中的'/'会产生如此大的差异。 我的意思是心不是:Sinatra Url'/'诠释
get 'some_url' do
end
和
get 'some_url/' do
end
应该指向同样的路线?为什么西纳特拉认为它是不同的路线?我花了一个小时试图弄清楚。
答
根据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。
我不知道为什么Sinatra认为它不同的路线,但有简单的解决方法:'get%r {some_url \ /?} do'。令人惊讶的是,即使这样做:'get%r {some_url}做'。 –
谢谢你的帮助 – djd