Rails将无效路由重定向到root

Kva*_*ass 7 ruby redirect ruby-on-rails-3

如果我的网站是www.foo.com用户输入的www.foo.com/blahblahblah话就会说这/blahblahblah是一条无效的路径(显然).但我希望它改为重定向到root_path,以便控制器可以处理URL - 页面www.foo.com应该呈现我想要拉取文本blahblahblah并用它做一些事情.我该怎么做呢?

Rob*_*vis 8

有几种可能性.这是一个.您可以将它添加到routes.rb 的底部:

match ':not_found' => 'my_controller#index',
  :constraints => { :not_found => /.*/ }
Run Code Online (Sandbox Code Playgroud)

这将建立一个catch-all路由,使MyController的索引操作处理任何缺少的路径; 它可以通过查看params[:not_found]和执行任何想要的操作来检测它们,例如重定向到root_path(redirect_to root_url),根据坏路径策略性地重定向某个地方,渲染特殊内容,检查引用者/引用者以获取有关源的线索等.

:constraints选项是必需的; 否则not_foundparam将无法包含斜杠和点等特殊字符.

把它放在路线的底部,因为显然它会匹配所有东西,并且你想让你的其他路线首先在路径上破解.

如果你只想重定向,仅此而已,你可以这样做(再次,在底部):

match ':not_found' => redirect('/'), :constraints => { :not_found => /.*/ }
Run Code Online (Sandbox Code Playgroud)


小智 5

在rails 4中获取'*path'=> redirect('/')