Ruby on Rails路由,你如何强制更改子域/域

时间:2011-02-05 20:44:59

标签: ruby-on-rails redirect routing dns subdomain

我的rails应用程序上有几个子域,主域也有。

假设我有这样的登录路线:

 match "login", :controller => "user_sessions", :action => "new"

现在可以在所有域和子域上访问此路由,例如:

porkjerkyicedcream.com/login

和...

admin.porkjerkyicedcream.com/login

我的问题是如何强制重定向删除子域(或添加子域)。因此,如果有人在 admin.porkjerkyicedcream.com/login 上访问 / login ,则会将其重定向到主域(反之亦然)?

干杯!

编辑:

  1. 我不一定需要路由中的解决方案。

  2. 我想避免在应用程序本身中指定和域名,因此可以在很多不同的域(例如不同的开发域)上运行很多地方

3 个答案:

答案 0 :(得分:7)

您可以在控制器中使用before_filter,然后适当地重定向。例如:

class UserSessionsController < ApplicationController
  before_filter :ensure_proper_subdomain, :only => "new"

  def ensure_proper_subdomain
    if request.host_with_port != 'admin.porkjerkyicedcream'
      redirect_to params.merge({host: 'admin.porkjerkyicedcream'})
    end
  end
end

答案 1 :(得分:0)

我认为这不能在路由文件中完成。但无论如何,您始终可以创建a custom filter并根据当前域/路径重定向用户。

答案 2 :(得分:0)

如果你添加:

,我认为你可以在application_controller中管理它
  def default_url_options(options={})
    #add whatever logic you want
    { :host => "example.com" }
  end