Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do I redirect without www using Rails 3 / Rack?

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:

Redirect non-www requests to www URLs in Ruby on Rails

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 application 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 redirected. All other requests should be ignored.

like image 948
maček Avatar asked Oct 28 '10 20:10

maček


1 Answers

In Ruby on Rails 4, removing www. from any URL whilst maintaining the pathname can be achieved simply by using:

# config/routes.rb  constraints subdomain: 'www' do   get ':any', to: redirect(subdomain: nil, path: '/%{any}'), any: /.*/ end 

In contrast, adding www. to the beginning of any URL that doesn't already have it can be achieved by:

# config/routes.rb  constraints subdomain: false do   get ':any', to: redirect(subdomain: 'www', path: '/%{any}'), any: /.*/ end 
like image 136
Oliver Morgan Avatar answered Oct 17 '22 09:10

Oliver Morgan