In Elixir's Phoenix framework, responding with a redirection response of 302 Found
is simple:
conn
|> redirect(to: some_path(conn, :some_action))
Today I was wondering how to do a permanent redirect, with status 301 Moved Permanently
.
A glance at the Phoenix source code linked from the docs for redirect/2
made it clear: the response will use a previously-set conn.status
if there is one.
So a 301
redirect is as simple as:
#!elixir
conn
|> put_status(:moved_permanently)
|> redirect(to: some_path(conn, :some_action))
Testing this is also simple. You just have to change this:
#!elixir
assert redirected_to(conn) == some_path(conn, :some_action)
to this:
#!elixir
assert redirected_to(conn, :moved_permanently) == some_path(conn, :some_action)
In both the controller and the test, you can use 301
in place of :moved_permanently
, but I prefer the clarity of using the atom.