2016-03-07 97 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,文檔推薦了一些不同的代碼。你可以看看我更新的問題,我有我打算基於文檔使用的代碼嗎?你能不能告訴我,如果我沒有定義環境,這個代碼會破壞開發環境。 –