Diese Frage wurde in verschiedenen Kombinationen gestellt, aber ich habe nicht die richtige Kombination gefunden, die meine spezielle Frage beantwortet.
Die Konfiguration
- Rails 3.1 (erlaubt mir die Verwendung von
force_ssl
in meinemApplicationController
) - Gehostet auf Heroku Cedar (damit ich die Middleware nicht anfassen kann)
- Meine SSL-Zertifikate sind registriert für
secure.example.com
Ich habe bereits hinzugefügt force_ssl
zu meinem ApplicationController, etwa so:
# file: controllers/application_controller.rb
class ApplicationController < ActionController::Base
protect_from_forgery
force_ssl
end
Das Problem
Wenn ein Benutzer derzeit zu http://example.com
schaltet force_ssl auf SSL um, aber da es sich nicht um secure.example.com
wird eine Warnung über ein ungeprüftes Sicherheitszertifikat angezeigt, da es das Standard-Zertifikat von Heroku verwendet.
(Ich habe festgestellt, dass die Navigation zu http://secure.example.com
leitet ordnungsgemäß weiter zu https://secure.example.com
und verwendet das richtige Sicherheitszertifikat. Das ist gut.)
Die Frage
Wie kann ich die http://www.example.com/anything
y http://example.com/anything
zur Weiterleitung an http://secure.example.com/anything
? (Ich gehe davon aus, dass force_ssl den Wechsel von http zu https übernimmt.) Da ich die Middleware nicht berühren kann (denken Sie daran, dass es sich um Heroku-Hosting handelt), habe ich annehmen Ich kann etwas tun wie:
# 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
... aber ich habe redirect_to und das request-Objekt noch nicht ausreichend verstanden, um zu wissen, was ich schreiben soll something...
. (Ich möchte sicher sein, dass es Abfrageparameter usw. verarbeitet).