如果你希望你整個應用程序要通過https則由於的Rails 4.0這樣做是爲了讓force_ssl
在配置文件中像這樣的最佳方式:
# config/environments/production.rb
Rails.application.configure do
# [..]
# Force all access to the app over SSL, use Strict-Transport-Security,
# and use secure cookies.
config.force_ssl = true
end
默認情況下此選擇已經存在於config/environments/production.rb
在新生成的應用程序,但被註釋掉了。
正如評論說,這將不只是重定向到https,而且還設置了Strict-Transport-Security
頭(HSTS),並確保安全標誌設置上的所有Cookie。這兩種方法都可以提高應用程序的安全性,而不會有明顯的缺點它使用ActionDispatch:SSL
。
的HSTS到期設置默認設置爲一年,不包括子域,這可能是罰款對於大多數應用。你可以用hsts
選項來配置此:
config.hsts = {
expires: 1.month.to_i,
subdomains: false,
}
如果你正在運行的Rails 3(> = 3.1)或不想使用https爲整個應用程序,那麼你可以使用該force_ssl
方法控制器:
class SecureController < ApplicationController
force_ssl
end
這就是全部。您可以設置每個控制器,或在您的ApplicationController
。您可以強制HTTPS有條件地使用熟悉的if
或unless
選項;例如:
# Only when we're not in development or tests
force_ssl unless: -> { Rails.env.in? ['development', 'test'] }
我可以澄清一下你的問題。你想迫使人們總是在你的網站上使用HTTPS,或者只是爲了某些URL?如果當前請求是HTTPS,則默認RAILS將繼續使用HTTPS。 – scottd 2009-11-02 21:59:24