Skip to main content

Redirect "myapp.com" to "www.myapp.com" in rails without using htaccess?


Using Morph Labs' Appspace to deploy a site means no automated way to redirect 'myapp.com' to 'www.myapp.com' (and no access to .htacess).



Is there an in-rails way to do this? Would I need a plugin like subdomain-fu ?



More specifically, I'm trying to do something like:



  • 'myapp.com' => 'www.myapp.com'

  • 'myapp.com/session/new' => 'www.myapp.com/session/new'



Basically, I always want the 'www' subdomain prepended on every request (because the SSL cert specifically has a common name of 'www.myapp.com').


Source: Tips4allCCNA FINAL EXAM

Comments

  1. Maybe something like this would do the trick:

    class ApplicationController < ActionController::Base
    before_filter :check_uri

    def check_uri
    redirect_to request.protocol + "www." + request.host_with_port + request.request_uri if !/^www/.match(request.host)
    end
    end

    ReplyDelete
  2. Carson's answer works great.

    Here's the code to go the other way (www -> no www)

    before_filter :check_uri

    def check_uri
    if /^www/.match(request.host)
    redirect_to request.protocol + request.host_with_port[4..-1] + request.request_uri
    end
    end

    ReplyDelete
  3. This worked great for me. I did make one small addition as I only wanted this behavior in my production environment:

    def check_uri
    redirect_to request.protocol + "www." + request.host_with_port + request.request_uri if !/^www/.match(request.host) if Rails.env == 'production'
    end

    ReplyDelete
  4. I know this is answered, but I thought everyone else should know about the CodeRack: Canonical Host solution. This is really nice as it allows for env specific redirects. http://coderack.org/users/tylerhunt/middlewares/6-canonical-host

    ReplyDelete
  5. I had to change Carson's answer to get this to work in Rails 3. I replaced request.uri with request.fullpath:

    class ApplicationController < ActionController::Base
    protect_from_forgery

    Rails.env.production? do
    before_filter :check_url
    end

    def check_url
    redirect_to request.protocol + "www." + request.host_with_port + request.fullpath if !/^www/.match(request.host)
    end
    end

    ReplyDelete

Post a Comment

Popular posts from this blog

Slow Android emulator

I have a 2.67 GHz Celeron processor, 1.21 GB of RAM on a x86 Windows XP Professional machine. My understanding is that the Android emulator should start fairly quickly on such a machine, but for me it does not. I have followed all instructions in setting up the IDE, SDKs, JDKs and such and have had some success in staring the emulator quickly but is very particulary. How can I, if possible, fix this problem?