Ruby on rails 重定向到另一个域,除非url包含标识符
抱歉,如果问题标题有点不对劲,想不出更具描述性的内容 所以我有两个域名:Ruby on rails 重定向到另一个域,除非url包含标识符,ruby-on-rails,ruby-on-rails-4,redirect,heroku,Ruby On Rails,Ruby On Rails 4,Redirect,Heroku,抱歉,如果问题标题有点不对劲,想不出更具描述性的内容 所以我有两个域名:aaa.com和bbb.com 我希望我的第二个域名bbb.com始终重定向到aaa.com,除非它有特定路径:bbb.com/ct/:id 两个域名现在都使用同一个Heroku应用程序 因此,在我的应用程序控制器中,我想,或者在路由中,我必须扫描请求URL,如果它包含/ct/:id,让它继续执行控制器操作,如果不重定向到aaa.com 或者,如果ct/:id不在url中,我可以将DNS设置为仅重定向吗 基本上,我想实现用户
aaa.com
和bbb.com
我希望我的第二个域名bbb.com
始终重定向到aaa.com
,除非它有特定路径:bbb.com/ct/:id
两个域名现在都使用同一个Heroku应用程序
因此,在我的应用程序控制器
中,我想,或者在路由中,我必须扫描请求URL,如果它包含/ct/:id
,让它继续执行控制器操作,如果不重定向到aaa.com
或者,如果ct/:id
不在url中,我可以将DNS设置为仅重定向吗
基本上,我想实现用户不能从bbb.com
导航应用程序,除非存在特定的urlbbb.com/ct/:id
我使用GoDaddy作为注册表,并为我的Heroku应用程序设置了2个Cnames
如何实现此行为?您可以创建机架中间件来执行重定向。这里就是一个这样的例子 或 在routes.rb中使用约束。 注意:我没有测试它
get "*path" => redirect("http://aaa.com"), constraint: lambda { |request| !request.url.match(/ct\/\d/) }
我更喜欢在实际控制器中执行重定向,而不是在路由文件中,这样您就可以为它编写控制器规范
# app/controllers/application_controller.rb
before_action :redirect_bbb_to_aaa
def redirect_bbb_to_aaa
if request.host == "http://bbb.com"
redirect_to some_aaa_path unless request.url == "http://bbb.com/ct/:id"
end
end
一些解释会很有帮助。我从来没有钻研过中间件。请看gem中的代码(上面提供的链接)。这是相同的链接。正如我所说,我还没有明白:(