2013-04-30 226 views
1

我跟着Railscast关于将子域添加到Rails应用程序here,并且所有的子域都可以很好地工作。现在,我只是不能找出一种方法来链接回根域没有子域,如果所请求的子域不存在。如何从URL中删除子域名?

我试着添加以下到我的application_controller.rb文件

redirect_to root_path(subdomain: false) if @city_or_state.nil? 

其中@city_or_state决定渡过请求子域是有效的。 redirect_to回到根目录,但不删除子域。

例如,如果用户试图去invalid.domain.com他们被重定向到根,但子域不会被删除。

我试图让invalid.domain.com重定向到domain.com

+0

什么版本的Rails?这在4.0.0.beta1中被破解了,但是在4.0.0.rc1中修复了这个问题 – 2013-04-30 16:04:50

+0

我正在使用Rails 3.1 – 2013-04-30 16:08:44

回答

4

好吧,我知道了。我必须使用以下内容:redirect_to root_url(:host => request.domain)

当我尝试root_path(:host => request.domain)它没有工作。只适用于root_url

我发现从丹尼尔·基欧一些意见here

当试图访问一个不存在的域,无效的子域从URL删除了答案。

2

你可以试试这个方式,我认为它的工作原理! 在application_controller.rb可以添加before_filter :validate_subdomain 那你这个代码添加到控制器:

private 
def validate_subdomain 
    # @city_or_state must be initialized before this 
    if @city_or_state.nil? 
    redirect_to request.domain 
    end 
end 
+0

@akjoe它有效吗?我没有测试它,因为我必须在本地机器上配置子域名,所以我只为request.domain做了重定向测试,但是从域本身做了测试。 – tbem 2013-04-30 17:43:05

+0

当我回到我的办公桌时,我会给它一个镜头,让你知道......谢谢! – 2013-04-30 18:32:41

+0

我添加了'request.domain'并尝试'blue.lvh.me:3000'(一个无效的子域),它只是去了一个空白页面。我从日志中取出这个:'开始GET“/帖子”为127.0.0.1在2013-04-30 12:40:14 -0800 通过PostsController处理#索引为HTML 城市负载(0.1ms)SELECT“cities “。* FROM”cities“WHERE”cities“。”subdomain“='Blue'LIMIT 1 State Load(0.2ms)SELECT”states“。* FROM”states“WHERE”states“。”subdomain“='Blue' LIMIT 1 重定向到http://blue.lvh.me:3000lvh.me' – 2013-04-30 20:53:05