Этот вопрос задавался в различных перестановках, но я не нашел правильную комбинацию, которая отвечает на мой конкретный вопрос.
Конфигурация
- 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...
. (Я хочу быть уверен, что он обрабатывает параметры запроса и т. Д.)