Skip to content

seanmcoleman/rack-no-www

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

19 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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

You can also specify the :only_hosts parameter to limit redirection to specific hosts

config.middleware.use(Rack::NoWWW, only_hosts: "www.example.org")

Requests not made on www.example.org will not be redirected to the root domain.

Credits

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

About

Rack middleware for redirecting 'www' requests

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Ruby 100.0%