玩sinatra时,我遇到了一个小问题:当我使用带有斜杠的参数时,它会混淆路由器引擎。那么有没有一种很好的方法来处理这种参数而无需对其进行编码?
代码看起来像
get 'add/:url' do
#....
end
我打算让 /add/ http://sctackoverflow.com/ 之类的东西工作
玩sinatra时,我遇到了一个小问题:当我使用带有斜杠的参数时,它会混淆路由器引擎。那么有没有一种很好的方法来处理这种参数而无需对其进行编码?
代码看起来像
get 'add/:url' do
#....
end
我打算让 /add/ http://sctackoverflow.com/ 之类的东西工作
您是否尝试使用 splat 参数?
就像是:
get '/add/*' do
protocol = params[:splat].first
address = params[:splat][1..-1].join('/')
url = protocol + "//" + address
end
谢谢,我还没有听说过 splat 参数,它非常适合这种情况。事实上,我查看了文档,发现使用捕获参数和正则表达式更短:
get %r{/add/(.+)} do
url = params[:captures]
end
或使用:
url = request.fullpath[5..-1]