如果没有匹配的路由,则重定向到根页面。

11
如果我输入了错误的路径或者没有匹配的路径,那么我想要重定向到root_path。我该怎么办?
提前感谢。
6个回答

25

在Rails 4/5中,你可以

get '*path' => redirect('/')

编辑。正如 @VenkatK 指出的那样,这应该是最后一个路由。路由的评估方式是顶部的路由优先级高于底部的路由。


3
当我们将上述路由写在所有路由的底部时,它才起作用。 - VenkatK
你可以如何通过这种方式发送 :notice:flash 提示? - Hellfar

16

将这个声明放在你的config/routes.rb文件的最后:

match "*path" => redirect("/")

"*path"将匹配任何内容,并将重定向到根路径。

欲了解更多信息,请查看Rails官方指南中的路由全局匹配重定向


2
在Passenger中无法运行。一旦Passenger启动->应用程序消息:您不应在路由器中使用“match”方法而没有指定HTTP方法。 如果要将操作公开为GET和POST,请添加“via:[: get,:post]”选项。 如果要将操作公开为GET,请在路由器中使用“get”: 而不是:匹配“控制器#动作” 进行:get“控制器#动作”(ArgumentError) - absessive
我正在使用Rails 6,但这个方法不起作用,它给了我一个错误提示:在路由器中使用match方法时,您不应该没有指定HTTP方法。如果您想将您的操作公开给GET和POST,请添加via: [:get, :post]选项。如果您只想将您的操作公开给GET,请在路由器中使用get: 替换原来的代码:match "controller#action" 改为:get "controller#action" - Postscripter

4

您可以通过将以下内容放入路由文件(底部)来重定向404。

map.connect '*path', :controller => 'some_controller', :action => 'some_action'

要重定向到根目录,您可以这样做:

以下是代码示例。

match "*path" => redirect("/")

在这个答案中有更多细节,以及通过捕获异常来实现的替代方法。


3

针对最新的 Rails 4.2+,match 语法有了微小的更改:

请将下面的代码放在项目 config/routes.rb 文件底部:

match '*path', to: redirect('/'), via: :all


1
在'public/404.html'中创建文件,并在路径未找到时重定向到该文件:
get '*path' => redirect('/404.html')

0
作为补充,当您使用上述任何建议答案时,您可能会收到错误消息:您不应在路由器中使用“match”方法而不指定HTTP方法
如果是这种情况,您可以将:via => [:get, :post]添加到您的重定向中:
match '*path' => redirect('/'), :via => [:get, :post]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接