Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 重定向到另一个域,除非url包含标识符_Ruby On Rails_Ruby On Rails 4_Redirect_Heroku - Fatal编程技术网

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
导航应用程序,除非存在特定的url
bbb.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中的代码(上面提供的链接)。这是相同的链接。正如我所说,我还没有明白:(