如何根据域名有条件地强制SSL?

Joe*_*oey 7 ssl https routes ruby-on-rails ruby-on-rails-4

我的Rails应用程序有两个域名:app.example.com,short.net.较长的域是标准域并且需要HTTPS,较短的域是用于提供短URL并且需要HTTP的便利域.

目前我正在强制使用SSL:

config.force_ssl = true
Run Code Online (Sandbox Code Playgroud)

但我真的只想为更长的域名强制使用SSL.我如何根据域名有条件地强制使用SSL?短域名将重定向到主域名,然后强制使用SSL.这将避免要求短域名的SSL证书.

思考?

Jas*_*ble 13

添加一些配置到您的ApplicationController:

class ApplicationController < ActionController::Base
   force_ssl if: :ssl_required?

   [...]

   private
   def ssl_required?
     request.host == 'app.example.com'
   end
end
Run Code Online (Sandbox Code Playgroud)

资料来源:http: //api.rubyonrails.org/classes/ActionController/ForceSSL/ClassMethods.html

  • 请注意,在控制器中设置`force_ssl`并未在配置中实现与`config.force_ssl`相同的功能.除了强制重定向外,基于配置的版本还为每个响应添加了HSTS和安全cookie([来源](https://github.com/rails/rails/blob/794252d70990162d14da17ee854ad353e74297ee/actionpack/lib/action_dispatch/middleware/ ssl.rb#L23)) (5认同)