在rails 3中将301子域重定向到用户自己的URL

时间:2011-04-18 14:21:00

标签: ruby-on-rails ruby-on-rails-3 redirect

我有一个rails应用程序,为用户提供其网站的子域名。然后,用户可以将自己的域指向此子域,使其看起来像他们自己的站点。

当用户在我的应用程序中输入域名时,我需要将我的应用程序中的任何子域URL的任何未来请求重定向到他们自己的域,同时也传递路径,例如company_site.hosted_site.com/pages/about_us重定向到www。 company_site.com/pages/about_us。

有人知道如何在rails 3中执行此操作吗?

我无法使用apache规则来访问数据库以获取重定向网址,也不想更改每个用户/子域的配置文件。

有人这样做过吗? ssems可能最好在机架中间件中完成?任何想法?

非常感谢 瑞克

1 个答案:

答案 0 :(得分:2)

一种简单的方法是在ApplicationController的before_filter块中执行此操作,以便所有操作都受其影响:

before_filter :redirect_to_custom_domain

def redirect_to_custom_domain
  if (customer = Customer.find_by_subdomain(request.host))
    if (customer.domain?)
      # Redirects to the customer's full domain
      redirect_to(customer.domain_url)

      # Returning false will halt additional processing for this request
      return false
    end
  end
end

客户将是您存储已分配的subdomain和可选自定义domain的记录,如果已指定,则会将其重定向到这些记录。

在您的客户记录中,您可能有类似这样的帮助方法:

def Customer < ActiveRecord::Base
  def domain_url
    "http://#{domain}/"
  end
end