1

在我的路由文件中,我们最初设置了这个路由:

  match '/search/*tag' => 'search#search'

我们现在要从 url 中删除单词“search”。所以我添加了一条新路线:

match '/*tag' => 'search#search'

这一切都很好。我们想更新旧路线以重定向到新路线,以保持 seo 和书签正常工作。

 match '/search/*tag' => redirect {|params| "/#{params[:tag]}"}

然而,这是该术语的复数形式。

Input url: www.fubar.com/search/work
Becomes:   www.fubar.com/works

是什么导致了这种情况,我如何阻止它使标签复数?

可能相关:我们需要使用 /*tag 而不是 /:tag 因为我们有时有一个标签列表。即 www.fubar.com/work/web/video

4

2 回答 2

1

事实证明,一旦我清除了缓存,一切正常。浏览器记得 301 重定向(我忘记了这一点,显然一直在为之前损坏的重定向提供服务。

match '/search/*tag' => redirect { |params| "/#{params[:tag]}" }
match '/*tag' => 'search#search'
于 2012-11-09T22:29:00.103 回答
0

我所能推荐的就是在块内填充 Rails.logger.debug{ params.inspect } 以进行重定向。这至少会让你开始调试它。当您偏离快乐的道路时,Rails 路由可能会变得棘手和脆弱,并且知道问题是在识别中(即 *tags 的匹配是复数形式)还是在路由中(重定向的结果是复数形式)将是第一个看的地方。

于 2012-11-09T21:50:42.560 回答