document.write('<link rel="stylesheet" href="http://flowcoder.com/stylesheets/pygment_trac.css" />');
document.write('<link rel="stylesheet" href="http://flowcoder.com/stylesheets/embed.css" />');
document.write('<div class="flowcoder_post flowcoder_clearfix">');
document.write('<div class="flowcoder_posttitle"><a href=\"http://flowcoder.com/87\">no-www Rack Middleware<\/a></div>');
document.write('<div class="flowcoder_postbody flowcoder_syntax"><div class=\"highlight\"><pre><span class=\"c1\"># Websites should have a canonical address. This address shouldn’t begin with “www” because <\/span>\n<span class=\"c1\"># it’s unnecessary and wasteful. See http://no-www.org/ for details. This middleware catches <\/span>\n<span class=\"c1\"># requests that begin with “www” and redirects them to the more reasonable non-www address.<\/span>\n\n<span class=\"c1\"># Rails Usage<\/span>\n\n<span class=\"c1\"># Put this file in lib/, and then add the following to config/environment.rb:<\/span>\n\n<span class=\"c1\"># Rails::Initializer.run do |config|<\/span>\n<span class=\"c1\">#   config.middleware.use “NoWWW” if RAILS_ENV == ‘production’<\/span>\n<span class=\"c1\"># end<\/span>\n\n<span class=\"k\">class<\/span> <span class=\"nc\">NoWWW<\/span>\n \n  <span class=\"no\">STARTS_WITH_WWW<\/span> <span class=\"o\">=<\/span> <span class=\"sr\">/^www\\./i<\/span>\n  \n  <span class=\"k\">def<\/span> <span class=\"nf\">initialize<\/span><span class=\"p\">(<\/span><span class=\"n\">app<\/span><span class=\"p\">)<\/span>\n    <span class=\"vi\">@app<\/span> <span class=\"o\">=<\/span> <span class=\"n\">app<\/span>\n  <span class=\"k\">end<\/span>\n  \n  <span class=\"k\">def<\/span> <span class=\"nf\">call<\/span><span class=\"p\">(<\/span><span class=\"n\">env<\/span><span class=\"p\">)<\/span>\n    <span class=\"k\">if<\/span> <span class=\"n\">env<\/span><span class=\"o\">[<\/span><span class=\"s1\">&#39;HTTP_HOST&#39;<\/span><span class=\"o\">]<\/span> <span class=\"o\">=~<\/span> <span class=\"no\">STARTS_WITH_WWW<\/span>\n      <span class=\"o\">[<\/span><span class=\"mi\">301<\/span><span class=\"p\">,<\/span> <span class=\"p\">{<\/span> <span class=\"s1\">&#39;Location&#39;<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"no\">Rack<\/span><span class=\"o\">::<\/span><span class=\"no\">Request<\/span><span class=\"o\">.<\/span><span class=\"n\">new<\/span><span class=\"p\">(<\/span><span class=\"n\">env<\/span><span class=\"p\">)<\/span><span class=\"o\">.<\/span><span class=\"n\">url<\/span><span class=\"o\">.<\/span><span class=\"n\">sub<\/span><span class=\"p\">(<\/span><span class=\"sr\">/www\\./i<\/span><span class=\"p\">,<\/span> <span class=\"s1\">&#39;&#39;<\/span><span class=\"p\">)<\/span> <span class=\"p\">},<\/span> <span class=\"o\">[<\/span><span class=\"s1\">&#39;Redirecting...&#39;<\/span><span class=\"o\">]]<\/span>\n    <span class=\"k\">else<\/span>\n      <span class=\"vi\">@app<\/span><span class=\"o\">.<\/span><span class=\"n\">call<\/span><span class=\"p\">(<\/span><span class=\"n\">env<\/span><span class=\"p\">)<\/span>\n    <span class=\"k\">end<\/span>\n  <span class=\"k\">end<\/span>\n  \n<span class=\"k\">end<\/span>\n<\/pre><\/div>\n</div>');
document.write('<div class="flowcoder_bottombar flowcoder_clearfix">');
document.write('<div class="flowcoder_postedby">Posted by <a href=\"http://flowcoder.com/trevorturk\">trevorturk<\/a> on <a href=\"http://flowcoder.com/\">Flowcoder<\/a></div>');
document.write('<div class="flowcoder_viewraw"><a href=\"http://flowcoder.com/87.txt\">view raw<\/a></div>');
document.write('</div></div>');
