在Sinatra,有没有办法将请求转发给另一个应用程序?

时间:2013-10-23 16:10:45

标签: sinatra rack

我正在尝试做这样的事情:

class Dispatcher < Sinatra::Base
  def initialize
    @foo = Foo.new
  end

  get '/foo/*' do 
    @foo.call(params[:splat])
  end
end

所以URL / foo / abc / def?xxx = yyy就像用/ abc / def?xxx = yyy调用Foo应用程序。

这似乎应该很容易,但我没有看到它的任何例子。

2 个答案:

答案 0 :(得分:1)

我最终在Rack config.ru文件中执行此操作:

map "/abc" do
  run Foo.new('abc')
end

map "/def" do
  run Foo.new('def')
end

不完全是我想要的,但是让我免于修改底层应用程序。

答案 1 :(得分:0)

我不确定你为什么要使用Sinatra。如果我理解你是对的,并且你使用Apache代理重写规则你就可以:

.htaccess文件

RewriteEngine On
RewriteRule ^foo/(.*) http://localhost:61000/$1 [P]

因此,所有domain.tdl/foo都会被http://localhost:61000/重定向到您当地正在运行的应用,其中包含所有发布和获取参数。