I understand there are a lot of questions that answer this. I'm familiar with .htaccess
and nginx.conf
methods, but I do not have access to such traditional configuration methods on heroku.
Simone Carletti gave this answer that leverages Rails 2.x Metals, but I'm using Rails 3 and this isn't compatible. http://stackoverflow.com/questions/1706247/redirect-non-www-requests-to-www-urls-in-rails/1706312#1706312
Please note:
I'm not looking for a simple before_filter
in my ApplicationController. I'd like to accomplish a rewrite similar to Simone's. I believe this is job for the webserver or middleware like Rack at the very least, so I'd like to leave this bit out of the actual app code.
Goal
redirect to status
----------------------------------------------------
www.foo.com foo.com 301
www.foo.com/whatever foo.com/whatever 301
Only hosts matching /^www\./
should be redirect. All other requests should be ignored.
Adapted answer
lib/no_www.rb
class NoWww
def initialize(app)
@app = app
end
def call(env)
request = Rack::Request.new(env)
if request.host.starts_with?("www.")
[301, {"Location" => request.url.sub("//www.", "//")}, self]
else
@app.call(env)
end
end
def each(&block)
end
end
config/application.rb
config.autoload_paths += %W(#{config.root}/lib)
config.middleware.use "NoWww"