【问题标题】:Phoenix: default path for no route foundPhoenix:未找到路由的默认路径
【发布时间】:2017-10-31 00:05:37
【问题描述】:
让我们看一个基本的路由器:
...
scope "/", Backend do
pipe_through [:browser, :with_session]
get "/", PageController, :index
end
...
调用http://localhost:4000/login 会引发默认的“Phoenix.Router.NoRouteError”。
处理这种情况的最佳方法是什么?
离开默认的凤凰错误页面?
重定向到索引页面?
重定向到未找到的自定义页面?
如何将任何未知路由重定向到单个路径?
【问题讨论】:
标签:
redirect
elixir
phoenix-framework
router
【解决方案1】:
处理这种情况的最佳方法是什么?
没有最好的方法。我个人更喜欢在同一个 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 呼叫之后出现。