перенаправление с http://example.com на https://example.mysite.com - PullRequest
3 голосов
/ 27 января 2012

Этот вопрос задавался в различных перестановках, но я не нашел правильную комбинацию, которая отвечает на мой конкретный вопрос.

Конфигурация

  • Rails 3.1 (что позволяет мне использовать force_ssl в моем ApplicationController)
  • Размещено на Heroku Cedar (поэтому я не могу прикоснуться к промежуточному программному обеспечению)
  • Мои сертификаты SSL зарегистрированы для secure.example.com

Я уже добавил force_ssl в свой ApplicationController, например:

# file: controllers/application_controller.rb
class ApplicationController < ActionController::Base
  protect_from_forgery
  force_ssl
end

проблема

В настоящее время, если пользователь переходит на http://example.com, force_ssl переключается на SSL, но, поскольку он НЕ secure.example.com, он выдает предупреждение о непроверенном сертификате безопасности, поскольку он использует сертификат Heroku по умолчанию.

(Я подтвердил, что переход к http://secure.example.com правильно перенаправляет на https://secure.example.com и использует правильный сертификат безопасности. Это хорошо.)

Вопрос

Как заставить http://www.example.com/anything и http://example.com/anything перенаправить на http://secure.example.com/anything? (Я предполагаю, что force_ssl будет обрабатывать переход с http на https.) Поскольку я не могу коснуться промежуточного программного обеспечения (напомним, что это хостинг Heroku), я предполагаю Я могу сделать что-то вроде:

# file: controllers/application_controller.rb
class ApplicationController < ActionController::Base
  protect_from_forgery
  force_ssl
  before_filter :force_secure_subdomain

private
  def force_secure_subdomain
    redirect_to(something...) unless request.ssl?
  end
end

... но я недостаточно ворчал redirect_to и объект запроса, чтобы знать, что писать для something.... (Я хочу быть уверен, что он обрабатывает параметры запроса и т. Д.)

Ответы [ 2 ]

4 голосов
/ 28 февраля 2012

вы можете перенаправить на другое имя хоста, выполнив следующие действия:

# file: controllers/application_controller.rb
class ApplicationController < ActionController::Base
  force_ssl :host => "secure.example.com"
end

см .: rails force_ssl source для получения дополнительной информации

0 голосов
/ 27 января 2012

Вы должны взглянуть на rack-rewrite - по сути, это перезапись Apache, но в форме Ruby, и ее можно использовать в Heroku.

Это позволит вам создавать все видыПравила уровня стойки и какие перенаправления и т.д. должны происходить и когда.

...