2016-03-07 96 views
0

我有一个rails应用程序部署在heroku上,域名由谷歌和DNS由cloudflare。我想将所有来到example.herokuapp.com的请求重定向到example.com。我不能设置上CloudFlare的,因为如果我用一个页面的法规,从example.herokuapp.comexample.com发送流量,然后CloudFlare的提出了这样的错误:ERROR Your URL should reference the domain 'example.com' in some way.example.herokuapp.com重定向到https://example.com

我也查在Heroku上,但我真的不明白是什么我应该这样做:

“即使您设置了自定义域,您的应用程序的Heroku域也将始终保持活动状态如果您希望用户独占使用自定义域,您的应用程序应发送HTTP状态301永久移动到告诉Web浏览器使用自定义域,Host HTTP请求头域将显示用户尝试访问的域;如果该域为example.herokuapp.com,则发送重定向。

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

UPDATE

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

我用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

+0

注入,我检查了文件,但它不是十分清楚。我使用rails 4.2.4,文档推荐了一些不同的代码。你可以看看我更新的问题,我有我打算基于文档使用的代码吗?你能不能告诉我,如果我没有定义环境,这个代码会破坏开发环境。 –