Rack middleware for redirecting 'www' requests
Ruby
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
autotest
lib
spec
CHANGELOG.md
Gemfile
LICENSE
README.md
Rakefile
rack-no-www.gemspec

README.md

rack-no-www

This piece of simple middlweware catches requests that begin with "www" and redirects them to the equivalent "non-www" address. For example, a request to "http://www.example.org" will be redirected to "http://example.org".

This kind of redirect adheres to the no-www philosophy, which advocates websites having a canonical address without the wasteful "www" subdomain. For a site to have a canonical address, it must have a single, preferred URL. If a site has multiple URLs that return the same content (e.g., a CNAME alias for "http://www.example.org" that points to "http://example.org"), search engines might interpret these URLs as different resources, thus affecting search rankings and their appearance. That's why a site should have a canonical URL. But since many users still think "www" is a necessary part of a web address, it's important to allow "www" requests and redirect these requests to the "non-www" equivalent.

Redirecting to a canonical URL might better be performed at the DNS level, or directly by the webserver (e.g., Apache or nginx). Alas, not all DNS services allow such configuration, and some cloud-based hosting solutions, (e.g., Heroku) don't allow explicit server configuration. Hence this piece of middleware.

Installation

$ gem install rack-no-www

Usage

Simply require 'rack/no-www' where appropriate, and then include the middleware in the Rack stack. In Rails 3, for example, the config/application.rb might be adjusted accordingly to place the middleware at the top of the Rack stack::

Module MyApp
  class Application < Rails::Application
    ...
    if Rails.env.production?
      config.middleware.insert_before Rack::Lock, Rack::NoWWW
    end
  end
end

Credits

This gem is simply a packaged version (with tests) of the idea outlined here by Trevor Turk.