如何在更改路由转换时重定向(301)?

Prz*_*ski 3 redirect routing ruby-on-rails ruby-on-rails-3

我正在寻找一种简单的方法来在我的应用程序中进行重定向.

情况:

我有这样的路线:

http://myapp.com/authors/5-hemingway/books/1-moby-dick
Run Code Online (Sandbox Code Playgroud)

路线以这种方式翻译(使用gem'i18n_routing'):

http://myapp.com/acutores/5-hemingway/libros/1-moby-dick
Run Code Online (Sandbox Code Playgroud)

现在,我将acutores的翻译改为了scriptores.简单的步骤,但我想将包含旧"acutores"资源名称的所有路由重定向到带有"scriptores"的路由.

我的猜测是,我应该在routes.rb中玩:

match "/acutores" => redirect("/scriptores")
Run Code Online (Sandbox Code Playgroud)

但是如何在"acutores"出现的所有情况下有效地做到这一点?(特别是嵌套路线)

Hei*_*kki 8

这重定向/acutores/something/scriptores/something但是失败了/acutores:

match "/acutores/*path" => redirect("/scriptores/%{path}")
Run Code Online (Sandbox Code Playgroud)

这似乎同时处理:

match "/acutores(/*path)" => redirect {|params| "/scriptores/#{params[:path]}"}
Run Code Online (Sandbox Code Playgroud)

- 编辑

这将删除所有尾部斜杠:

match "/acutores(/*path)" => redirect{ |params| "/scriptores/#{params[:path]}".chomp("/") }
Run Code Online (Sandbox Code Playgroud)

我遇到了浏览器缓存重定向问题,因此在修改后清空缓存.