[Rails] How to do a 301 redirect

6 Nov

I had to dig a little for this. The answer is simply:

1
2
headers["Status"] = "301 Moved Permanently"
redirect_to "/"

Here is the relevant snippet from response.rb in ActionPack:

1
2
3
4
def redirect(to_url, permanently = false)
  @headers["Status"]   = "302 Found" unless @headers["Status"] == "301 Moved Permanently"
  @headers["location"] = to_url
  ...

So as you can see, it actively checks for that particular header. Kinda weird that it doesn’t have a :status flag like so many other methods, but that’s the way it is.

3 Responses to “[Rails] How to do a 301 redirect”

  1. Phil 06. Nov, 2005 at 12:35 AM #

    Thanks Lars! This post was definitely just a time saver for me!

    So ActionPack seems a little broken here — what’s up with that permanently parameter that… doesn’t get used?

  2. Lars Pind 06. Nov, 2005 at 12:35 AM #

    Yeah, seems it was lost in the shuffle when the redirect code was refactored.

  3. Stephan Soller 06. Nov, 2005 at 12:35 AM #

    Thanks for the hint. I was just about to start digging around. You saved me quite some time.