0

[Rails] How to do a 301 redirect

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 comments

Phil
 

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?
Read more
Read less
  Cancel
Lars Pind
 

Yeah, seems it was lost in the shuffle when the redirect code was refactored.
Read more
Read less
  Cancel
Stephan Soller
 

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

Leave a comment