Rack Canonical Host is a bit of Rack middleware that lets you define a single host as the canonical host for your site, and redirect all other hostnames to that canonical host.
In the simplest case, just specify the host name and any requests coming in that aren’t for the host example.com will be rewritten with the proper host.
use Rack::CanonicalHost, 'example.com'
You could also define a constant in your environment-specific configuration files to set up a canonical host redirect for only certain environments.
CANONICAL_HOST = 'example.com'
Then, you can set up the middle are like this.
use Rack::CanonicalHost, CANONICAL_HOST if defined?(CANONICAL_HOST)
Alternatively, you can pass a block whose return value will be used to set the canonical host.
use Rack::CanonicalHost do case ENV['RACK_ENV'].to_sym when :staging then 'example.com' when :production then 'staging.example.com' end end
Using Rack::CanonicalHost in your rails 3 app is pretty straight forward.
Open up your gemfile and add the following. Then ‘bundle install’ to get the gem.
gem 'rack-canonical-host'
Then create the file config/initializers/canonical_host.rb to capture the configuration block.
Rails.application.config.middleware.use Rack::CanonicalHost do case ENV['RACK_ENV'].to_sym when :development then 'localhost.example.com' #make sure this is in your dns or /etc/hosts file when :staging then 'staging.example.com' when :production then 'www.example.com' end end
You will need to restart your server to have this change take effect.
Copyright © 2009 Tyler Hunt. See LICENSE for details.