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

Phoenix: default path for no route found

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

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

  get "/", PageController, :index
end
...

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

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

What's the best approach to handle this situation?

没有最好的方法。我个人更喜欢在同一个 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

以上将所有未知的 GET 请求重定向到 /404。确保这条路线在你所有 get 电话之后。