Phoenix:未找到路由的默认路径

Raz*_*nar 1 redirect router elixir phoenix-framework

让我们看一下基本的路由器:

...
scope "/", Backend do
  pipe_through [:browser, :with_session]

  get "/", PageController, :index
end
...
Run Code Online (Sandbox Code Playgroud)

调用http://localhost:4000/login会引发默认的“Phoenix.Router.NoRouteError”。处理这种情况的最佳方法是什么?离开默认的 Phoenix 错误页面?重定向到索引页?未找到重定向到自定义页面?

如何将任何未知路由重定向到单个路径?

Dog*_*ert 6

处理这种情况的最佳方法是什么?

没有最好的方法。我个人更喜欢在同一个 URL 上显示 404 消息,这样如果用户输入错误,他们就能够编辑和修复 URL,而不必再次重新输入确切的 URL,如果网站出现问题,他们就必须这样做将无效 URL 重定向到某个地方。

如果您仍然想重定向,可以在范围块的末尾创建一个包罗万象的路由和一个简单的控制器:

# Controller
defmodule MyApp.FourOhFour do
  use MyApp.Web, :controller

  def index(conn, _params) do
    redirect(conn, to: "/404")
  end
end

# Route
scope "/", MyApp do
  get "/*path", FourOhFour, :index
end
Run Code Online (Sandbox Code Playgroud)

上面的代码会将所有未知的 GET 请求重定向到/404. 确保这条路由出现在您所有的get呼叫之后。