Этот вопрос задавался в различных перестановках, но я не нашел правильной комбинации, отвечающей на мой конкретный вопрос.
Конфигурация
- 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
Проблема
В настоящее время, если пользователь переходит к https://example.com
, force_ssl переключается на SSL, но, поскольку это НЕ secure.example.com
, выдается предупреждение о непроверенном сертификате безопасности, поскольку он использует сертификат Heroku по умолчанию.
(Я убедился, что переход к https://secure.example.com
правильно перенаправляет на https://secure.example.com
и использует надлежащий сертификат безопасности. Это хорошо.)
Вопрос
Как заставить https://www.example.com/anything
и https://example.com/anything
перенаправлять на https://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...
. (Я хочу быть уверен, что он обрабатывает параметры запроса и т. д.)