我的Rails應用程序有兩個域名:app.example.com,short.net。較長的域是標準域,需要HTTPS,較短的域是提供短URL並需要HTTP的便捷域。如何根據域名有條件強制使用SSL?
目前我強迫SSL:
config.force_ssl = true
但我真的只是想迫使SSL對於較長的域名。我如何根據域名有條件地強制使用SSL?短域名將重定向到主域名,然後被迫使用SSL。這將避免爲短域名申請SSL證書。
想法?
我的Rails應用程序有兩個域名:app.example.com,short.net。較長的域是標準域,需要HTTPS,較短的域是提供短URL並需要HTTP的便捷域。如何根據域名有條件強制使用SSL?
目前我強迫SSL:
config.force_ssl = true
但我真的只是想迫使SSL對於較長的域名。我如何根據域名有條件地強制使用SSL?短域名將重定向到主域名,然後被迫使用SSL。這將避免爲短域名申請SSL證書。
想法?
添加一些配置,以你的ApplicationController
:
class ApplicationController < ActionController::Base
force_ssl if: :ssl_required?
[...]
private
def ssl_required?
request.host == 'app.example.com'
end
end
來源:http://api.rubyonrails.org/classes/ActionController/ForceSSL/ClassMethods.html
class ApplicationController < ActionController::Base
force_ssl if: :force_ssl?
private
def force_ssl?
if Rails.env.production? || Rails.env.staging?
return request.host != CONFIG[:short_host]
end
return false
end
end
這是相當有趣的時刻。我在下面發佈了我的解決方案,並且非常接近您的建議。我試圖在routes.rb文件中解決這個問題,但我認爲我更喜歡這種方法。 – Joey
請注意,在控制器中設置'force_ssl'並沒有在配置中實現與'config.force_ssl'相同的功能。除了強制重定向外,基於配置的版本還爲每個響應添加了HSTS和安全cookie([source])(https://github.com/rails/rails/blob/794252d70990162d14da17ee854ad353e74297ee/actionpack/lib/action_dispatch/middleware/ ssl.rb#L23)) – seb
'syntax error,unexpected':'force_ssl if::ssl_required?' – bshea