11

我需要在我的应用程序中的所有路由上强制 SSL,除了landing#index.

config/application.rb中,我有:

config.force_ssl = true

然后在 中landing_controller.rb,我有:

force_ssl :except => :index

但是,所有路由仍被重定向到https.

有谁知道如何在 Rails 3.1+ 应用程序中有条件地强制 SSL?

解决方案:

将以下内容添加到您的Gemfile:

gem 'rack-ssl-enforcer'

将以下内容添加到您的config/application.rb:

config.middleware.use Rack::SslEnforcer, :except => [ /\/$/ ], :strict => true
4

3 回答 3

13

我在这里问了一个关于 stackoverflow 的类似问题,并被告知使用https://github.com/tobmatth/rack-ssl-enforcer。我还没有尝试过,但是根据自述文件,它似乎可以解决您在某些路由上有条件地强制执行 ssl 的问题。

于 2012-06-06T04:42:37.653 回答
6

Rails 4 和 ActiveAdmin 1.0b,我修改了 config/initializers/active_admin.rb:

config.before_filter :force_ssl_redirect, if: :https_enabled?

force_ssl_redirect在 actionpack/lib/action_controller/metal/force_ssl.rb 中定义并且是 Rails 的force_ssl类方法调用的。

https_enabled?在我的 application_controller.rb 中定义:

def https_enabled?
  ENV['HTTPS_ENABLED'] == 'true'
end
于 2014-04-02T16:50:51.703 回答
-2

你可以这样做:

控制器

force_ssl :except => :index

看法

假设您的索引路径名称是index_landing_path

<%= link_to 'Landing', index_landing_path, :protocol => 'http' %>
于 2012-05-27T11:33:16.347 回答