301子域重定向(Rails)

时间:2014-09-16 17:44:38

标签: ruby-on-rails ruby redirect ruby-on-rails-4 wildcard-subdomain

我有一个很快会切换域名的Rails应用程序。由于我们不想破坏任何旧链接,因此我想使用旧域名为所有请求设置301重定向。除了有一些使用子域的路由之外,关于此的一切都相对简单。

基本上需要发生的是:

  • 'olddomain.com/somepath' (301) ~> 'newdomain.com/somepath'
  • 'subdomain.olddomain.com/somepath' (301) ~> 'subdomain.newdomain.com/somepath'

我在这个问题上看到的大多数建议通常属于两类之一。

  1. 没有涉及任何子域
  2. 重定向都涉及一致的子域,可以在重定向时作为主机的一部分包含在内
  3. 在我的情况下,大多数请求都不会有子域名,但是会有一些子域名。

    将HTTP_HOST(request.env['HTTP_HOST'])分离到其子域和域组件非常容易,将传入请求中的域与应用程序的新域进行比较,如果他们没有&#39 ; t匹配,重定向到新的uri(传入请求协议+(可能)子域+新域+请求路径),但由于某种原因,它感觉非常混乱,我想有一个更清洁的方法来完成同样的事情。

    这里是(稍微更具可读性)伪代码:     

              
    • 如果传入请求中存在子域名,请执行request.env [' HTTP_HOST']并删除子域名以获取域名
    •         
    • 将传入请求中的域名与新域名进行比较
    •         
                    
      • 如果匹配,则不会重定向
      •             
      • 如果他们不匹配,请重定向
      •             
                          
        • 如果请求包含子域,请在重定向uri
        • 中包含子域                 
        • 如果没有子域名,请将子域名保留为重定向uri
        •             
                
          

    就像我提到的那样,条件使它感到麻烦。

    我不介意使用控制器级解决方案,而不是搞乱中间件,因为这不太可能很长时间。任何关于考虑和/或资源的方法的建议都将受到高度赞赏。

0 个答案:

没有答案