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
电话之后。
让我们看一个基本的路由器:
...
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
电话之后。