5

What is the proper way to send a subdomain.herokuapp.com to the apex domain of the application? This is to avoid multiple domain names with the same content.

4

3 回答 3

8

https://github.com/tylerhunt/rack-canonical-host似乎是这个的完美选择。把它留在这里给有同样问题的其他人。

于 2013-04-25T08:45:01.457 回答
6

引用自https://devcenter.heroku.com/articles/custom-domains

域 myapp.herokuapp.com 将始终保持活动状态,即使您设置了自定义域。如果您希望用户独占使用自定义域,您应该发送 HTTP 状态 301 Moved Permanently 以告诉 Web 浏览器使用自定义域。Host HTTP 请求标头字段将显示用户尝试访问的域;如果该字段是 myapp.herokuapp.com,则发送重定向。

您可以使用 ApplicationController 中的 before 过滤器或使用 rails 路由中的约束将请求重定向到“subdomain.herokuapp.com”。

于 2013-04-25T08:46:39.743 回答
2

对于具有一些可扩展性的全面答案,总体而言,它看起来像这样;

class ApplicationController < ActionController::Base

  before_filter :redirect_to_example if Rails.env.production?

  # Prevent CSRF attacks by raising an exception.
  # For APIs, you may want to use :null_session instead.
  protect_from_forgery with: :exception

  private

    # Redirect to the appropriate domain i.e. example.com
    def redirect_to_example
      domain_to_redirect_to = 'example.com'
      domain_exceptions = ['example.com', 'www.example.com']
      should_redirect = !(domain_exceptions.include? request.host)
      new_url = "#{request.protocol}#{domain_to_redirect_to}#{request.fullpath}"
      redirect_to new_url, status: :moved_permanently if should_redirect
    end
end

这会将所有内容重定向到domain_to_redirect_to除了domain_exceptions.

于 2014-01-31T10:31:06.880 回答