如何将子域重写到另一个子域?

时间:2014-04-25 09:52:12

标签: ruby-on-rails url-rewriting subdomain rack middleware

我编写了这个简单的机架中间件来重写我的子域名:

def call(env)
  request = Rack::Request.new(env)

    if request.host.starts_with?("something-something")
      [301, { "Location" => request.url.gsub('something-something','site-i-want') }, self]
    else
      @app.call(env)
    end

这在开发上很好用。但在制作中,我在.each

调用TheNameOfMyRackMiddleware时收到错误消息

对于我如何编写这个内容,是否存在一些在语法上看起来奇怪的错误?

我希望此someting-something.mywebsite.com转到site-i-want.mywebsite.com

我也直接尝试了我的路线:

constraints :subdomain => 'something-something' do
  redirect { |p, req| req.url.sub('something-something', 'site-i-want') }
end  

在开发方面效果很好。但是在我失败之前没有说过网站不存在之前没有路由。

完全愿意接受这项工作。

1 个答案:

答案 0 :(得分:1)

如何在路线中尝试:

constraints subdomain: 'something-something' do
  get ':any', to: redirect(subdomain: 'site-i-want', path: '/%{any}'), any: /.*/
end

它基本上捕获了对“某事物”域的任何请求,并使用现有路径重写它,但是新的子域。