Как выполнить 301 перед force_ssl? Рельсы 3.1 - PullRequest
1 голос
/ 01 ноября 2011

Мне нужно заставить 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 ]

1 голос
/ 21 ноября 2011

Если вы можете заставить свой веб-сервер выполнять перенаправление, это обычно лучше.Если вы используете Heroku или аналогичную платформу, на которой веб-сервер не может быть перенаправлен для вас, внесите следующие изменения:

Измените строку промежуточного программного обеспечения на:

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

Тогдав вашем gemfile включите:

gem 'rack-ssl', :require => 'rack/ssl'
0 голосов
/ 01 ноября 2011

Если я не неправильно понимаю, я думаю, что вы используете инструкции <3.1 для приложения 3.1. В 3.1 вам нужно только установить force_ssl в true, и это приведет к желаемому поведению. </p>

...