【问题标题】:Redirect to another Domain except if the url contains an identifier重定向到另一个域,除非 url 包含标识符
【发布时间】:2015-12-24 22:24:10
【问题描述】:

对不起,如果问题标题有点偏离,想不出更具描述性的东西。

所以我有 2 个域:aaa.combbb.com

我希望我的第二个域 bbb.com 始终重定向到 aaa.com 除非它具有特定路径:bbb.com/ct/:id

两个域现在都使用同一个 Heroku 应用程序。

所以我猜在我的Application Controller 或Routes I 中,必须扫描请求URL,如果它包含/ct/:id,让它继续控制器操作,如果不重定向到aaa.com。

或者我可以以某种方式将 DNS 设置为仅在 ct/:id 不在 URL 中时重定向?

基本上我想实现用户无法从bbb.com 导航应用程序,除非存在特定的网址bbb.com/ct/:id

我使用 GoDaddy 作为注册商,并为我的 Heroku 应用设置了 2 个 Cname。

我该如何完成这种行为?

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-4 redirect heroku


    【解决方案1】:

    我更喜欢在实际控制器中而不是在路由文件中进行重定向,因此您可以为其编写控制器规范。

    # 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
    

    【讨论】:

      【解决方案2】:

      您可以创建一个机架中间件来执行重定向。一个这样的例子是这里https://github.com/gbuesing/rack-host-redirect/blob/master/lib/rack/host_redirect.rb

      在 routes.rb 中使用约束。 注意:我没有测试过。

      get "*path" => redirect("http://aaa.com"), constraint: lambda { |request| !request.url.match(/ct\/\d/) }
      

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-10-27
      • 1970-01-01
      • 2015-03-15
      • 2020-10-01
      • 1970-01-01
      • 2019-04-09
      • 1970-01-01
      • 2015-10-24
      相关资源
      最近更新 更多