【问题标题】:Rails App on Heroku - Redirect from .com to .orgHeroku 上的 Rails 应用程序 - 从 .com 重定向到 .org
【发布时间】:2011-01-17 11:14:12
【问题描述】:

对于托管在 Heroku 上的 Rails 应用程序,我们使用 Zerigo DNS 插件将自定义域(例如 mydomain.org)指向 Heroku 应用程序。我们为 mydomain.org 注册了 SSL 证书

现在,我们希望 mydomain.com 重定向到 mydomain.org。我们尝试在控制器/机架级别实施重定向规则。不工作。浏览器 URL 仍然指向 .com 而不是 .org

有没有人在使用 Heroku 应用时遇到过同样的问题!!?

【问题讨论】:

  • 除了“不起作用”之外,您能否更具体地说明您尝试了什么以及它是如何失败的?
  • 我使用了 Rack::ForceDomain (theadmin.org/articles/2010/06/10/…)。实际上在firebug中,它显示了从.com到.org的301,但浏览器URL仍然在.com
  • 在应用程序控制器中,根据请求中的主机名,我使用基于正则表达式的搜索“.com”的存在来重定向到“.org”。与之前评论中提到的问题相同。
  • 你能发布一些“不起作用”的代码吗?

标签: ruby-on-rails web-applications mod-rewrite heroku


【解决方案1】:

我已使用以下技术从“example.com”重定向到“www.example.com”(如此处所述,http://docs.heroku.com/custom-domains)。这可能适用于从 .com 重定向到 .org 的情况。

app/controllers/application_controller.rb

class ApplicationController < ActionController::Base
  protect_from_forgery

  before_filter :ensure_domain

  protected

  def ensure_domain
    if request.env['HTTP_HOST'] != 'www.example.com' && Rails.env.production?
      redirect_to "http://www.example.com", :status => 301
    end  
  end

end

在您的情况下,您可以将 .com 和 .org 域的 DNS 记录指向在 Heroku 上运行的应用。您的应用程序将检查 HTTP_HOST 以查看它是否指定了您的 .org URL。如果没有,那么它将重定向到您的 .org URL。

【讨论】:

  • ensure_domain 不属于控制器类(它可以工作,就像控制器类中的 SQL 可以工作,但不属于那里) - 它属于 Rack 中间件,这应该是来自config/environments/production.rb 内的config.middleware.use
  • @Justice:这是从 Heroku 上链接的 URL 中提取的。如果您觉得这里有一个令人信服的论点(而且看起来确实如此),您应该写下它们,因为使用该引用的人比这个要多得多。
  • 这恰好是最简单的方法。它只是不像我提到的那样干净,因为它在控制器中引入了对环境的依赖(应该降级到配置中),并且它在控制器中引入了对域名的依赖(也应该降级)到配置)。如果 Heroku 示例有效并且我列出的问题对您来说不是问题,那么使用它并没有什么坏处。不过,如果您的代码变得更复杂,您可以考虑我的建议。
  • @Justice:我将这种方法用于一个非常小的应用程序。但是,您提出了一个很好的观点,即可能希望将这种类型的逻辑与更大、更复杂的应用程序分开。此外,就我而言,我在配置文件中定义了 URL 字符串,以便它们在应用程序代码之外,就像您建议的那样。我肯定会推荐这个。
  • 我相信,当您使用 Rack 中间件执行此操作时,不会加载整个 Rails 堆栈 - 当然有很多代码完全被绕过 - 因此也有性能优势。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-23
  • 2018-11-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多