如何在force_ssl之前执行301? Rails 3.1

时间:2011-10-31 21:15:49

标签: ruby-on-rails-3 middleware

我需要http://example.com转到https://www.example.com。现在它在浏览器中发出警告。我跟着:http://www.simonecarletti.com/blog/2011/05/configuring-rails-3-https-ssl/

从/ lib / middleware(Rails 3.1)加载

class WwwMiddlewareRedirect
  def initialize(app)
    @app = app
  end

  def call(env)
    request = Rack::Request.new(env)
    if request.host.starts_with?("example.com")
      [301, {"Location" => request.url.sub("//", "//www.")}, self]
    else
      @app.call(env)
    end
  end

  def each(&block)
  end
end

生产环境

Example::Application.configure do

  config.force_ssl = true

  # Force all access to the app over SSL, use Strict-Transport-Security, and use secure cookies.
  # config.force_ssl = true

  config.middleware.use "WwwMiddlewareRedirect"
end

2 个答案:

答案 0 :(得分:1)

如果您可以让您的网络服务器进行重定向,那通常是最好的。如果您使用的是Heroku或类似的平台,您无法让网络服务器为您重定向,请进行以下更改:

将中间件行更改为:

config.middleware.insert_before Rack::SSL, "WwwMiddlewareRedirect"

然后在你的gemfile中,包括:

gem 'rack-ssl', :require => 'rack/ssl'

答案 1 :(得分:0)

除非我误解,否则我认为你正在使用< 3.1 3.1应用程序的说明。在3.1中,您只需要将force_ssl设置为true,它将导致您想要的行为。