example.herokuapp.com重定向到https://example.com

时间:2016-03-07 21:01:12

标签: ruby-on-rails heroku dns cloudflare

我在heroku上部署了一个rails应用程序,由google和DNS由cloudflare部署了域。我想将example.herokuapp.com的所有请求重定向到example.com。我无法在cloudflare上设置此功能,因为如果我使用的网页规则会将流量从example.herokuapp.com发送到example.com,那么cloudflare会引发此错误:ERROR Your URL should reference the domain 'example.com' in some way.

我也检查过heroku,但我不能真正得到我应该做的事情:

"即使您已设置自定义域,您的应用程序的Heroku域也将始终保持活动状态。如果您希望用户专门使用自定义域,您的应用应发送HTTP状态301 Moved Permanently以告知Web浏览器使用自定义域。主机HTTP请求标头字段将显示用户尝试访问的域;如果该字段是example.herokuapp.com,则发送重定向。"

将流量重定向到https://example.com的首选方法是什么?

更新

application.rb中

config.middleware.insert_before(Rack::Runtime, Rack::Rewrite) do
  r301 %r{.*}, "https://example.com$&", 
  :if => Proc.new { |rack_env| rack_env['SERVER_NAME'] != 'example.com' }
end

1 个答案:

答案 0 :(得分:1)

我使用rack-rewrite

首先将其添加到您的Gemfile:

gem 'rack-rewrite'

然后运行bundle install

现在将以下内容添加到config.ru文件中:

require 'rack-rewrite'

use Rack::Rewrite do
  r301 %r{.*}, "https://example.com$&", :if => Proc.new {|rack_env|
    rack_env['SERVER_NAME'] != 'example.com'
  }
end

如果请求不适用于example.com,则会执行301重定向到https://example.com