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.
问问题
1489 次
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 回答