Alb*_*ore 38 redirect routing routes ruby-on-rails url-routing
每当用户点击错误的页面时,rails会从公共文件夹中显示404.html.但是,我只想将浏览器重定向到根页面,而不显示任何内容.所以我尝试了通配,但无济于事,它仍然显示404页面.这是我的路线文件的摘录:
# ...
map.root :controller => 'home', :action => 'home'
map.connect '*', :controller => 'home', :action => 'home'
Run Code Online (Sandbox Code Playgroud)
有什么建议?多谢你们!
Ark*_*kan 75
如果您的项目由rails 3供电,请将此行添加到您的routes.rb中
match '*path' => redirect('/')
Run Code Online (Sandbox Code Playgroud)
编辑:如果您使用的是Rails 4或5
match '*path' => redirect('/'), via: :get
Run Code Online (Sandbox Code Playgroud)
要么
get '*path' => redirect('/')
Run Code Online (Sandbox Code Playgroud)
Sam*_*der 19
就像Arkan的回答一样.有一点,如果不想在开发环境中这种行为,那么可以做 -
match '*path' => redirect('/') unless Rails.env.development?
Run Code Online (Sandbox Code Playgroud)
use*_*ser 10
导轨4-
(routes.rb)
您仍然可以使用简单get方法重定向所有未知路由.
get '*path', to: 'home#index'
Run Code Online (Sandbox Code Playgroud)
如果您希望为POST和GET请求提供路由,您仍然可以使用匹配,但Rails希望您通过指定请求方法via.
match "*path" => "home#index", via: [:get, :post]
Run Code Online (Sandbox Code Playgroud)
请记住,它routes.rb是按顺序执行的(匹配适合所提供的路径结构的第一个路径),因此在匹配的底部放置通配符.
rails 5.2 中似乎存在一个错误,其中 active_storage 路由被 catchall 路由获取,导致上传图像的链接断开。该问题已在 github 上的 rails repo 中报告,并且有人评论了以下补丁,直到该错误在新版本中得到修复:
在routes.rb去年前右end
get '*all', to: 'application#index', constraints: lambda { |req|
req.path.exclude? 'rails/active_storage'
}
Run Code Online (Sandbox Code Playgroud)
然后在应用程序控制器中添加:
def index
flash.notice = 'No page found at that address'
redirect_to root_path
end
Run Code Online (Sandbox Code Playgroud)