这个问题已经在各种排列中被问到,但我找不到能够回答我特定问题的正确组合。
force_ssl
中使用ApplicationController
)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...
写些什么。 (我想确保它处理查询参数等。)
答案 0 :(得分:4)
您可以通过执行以下操作重定向到其他主机名:
# file: controllers/application_controller.rb
class ApplicationController < ActionController::Base
force_ssl :host => "secure.example.com"
end
请参阅:rails force_ssl source了解更多信息
答案 1 :(得分:0)
你应该看看rack-rewrite - 它本质上是Apache重写,但是以Ruby形式,可以在Heroku上使用。
这将允许您创建各种机架级规则以及应该发生何种重定向等。