3

我正在使用 Sinatra 路由,如果可能的话,我想将普通的 HTTP 地址解释为路由中的参数:

url http://somesite/blog/archives   

路线在哪里:

/http://somesite/blog/archives 

代码是:

get '/:url' do |u|  
(some code dealing with url)

HTTP URL 中的各种“/”正在产生问题。

我发现的解决方法是仅传递上面示例中由“somesite”表示的 URL 部分,然后使用:

get '/:url' do |u|
buildUrl = "http://#{u}/blog/archives"
(some code dealing with url)

有没有办法直接处理完整的 URL?

4

2 回答 2

6

这不会像您指定的那样工作。正如您所注意到的,斜线会引起麻烦。您可以做的是将 URL 作为查询字符串参数而不是 URL 的一部分传递。

get '/example' do
  url = params[:url]
  # do code with url
end

然后,您可以通过将数据发送到http://yoursite.com/example?url=http://example.com/blog/archives

于 2013-08-06T14:24:19.553 回答
0

你想要什么并不明显,但是,一般来说,Ruby 的内置URI类对于剥离 URL、修改它们,然后重建它们很有用。如果它不够复杂,Addressable::URI gem 应该填补任何缺失的漏洞:

require 'uri'
param = '/http://somesite/blog/archives'
scheme, userinfo, host, port, registry, path, opaque, query, fragment = URI.split(param[1..-1])
=> ["http", nil, "somesite", nil, nil, "/blog/archives", nil, nil, nil]
于 2013-07-30T22:43:33.250 回答