我正在使用 Rack Rewrite to 301 将我的 apex/root 域重定向到我的 www 域,因为我的通配符 SSL 不支持根域。我还想在整个站点范围内强制使用 SSL,但似乎无法在强制 SSL 之前进行重写。我尝试了一些事情,即这个答案中的响应:https ://stackoverflow.com/a/8217170/535632
这是我的重写代码:
Gospot::Application.config.middleware.insert_before(Rack::Runtime, Rack::Rewrite) do
if Rails.env.production?
r301 %r{.*}, Proc.new {|path, rack_env| "http://www.#{rack_env['SERVER_NAME']}#{path}" },
:if => Proc.new {|rack_env| rack_env['SERVER_NAME'] == 'mydomain.com'}
end
end
我试过了:
require 'rack/ssl'
Gospot::Application.config.middleware.insert_before(Rack::SSL, Rack::Rewrite) do
而不是使用config.force_ssl = true
inproduction.rb
但我在 Heroku 上收到以下错误:
No such middleware to insert before: Rack::SSL (RuntimeError)
无论如何在 force_ssl 之前运行我的机架重写?我找到了很多答案,但它们似乎都适用于 Rails < 3.1