如何在 Rails 路由中使用正则表达式进行重定向?

dre*_*ves 4 ruby routing ruby-on-rails url-rewriting

我的 routes.rb 中的这个尝试重写规则可能是不言自明的:

match "/:user/:photo-thumb.png" => 
      redirect("/%{user}/photos/%{photo}/image?style=thumb"),
      :photo => /[a-zA-Z]+/
Run Code Online (Sandbox Code Playgroud)

我想将 mysite.com/alice/foo-thumb.png 之类的内容重定向到 mysite.com/alice/photos/foo/image?style=thumb

不过上面的尝试是错误的。任何修复它的想法?

dre*_*ves 5

以下对我有用:

match "/:user/:photo_thumb.png" => 
      redirect{|p| 
        "/#{p[:user]}/photos/#{p[:photo_thumb].split('-')[0]}/image?style=thumb"
      },
      :constraints => { :photo_thumb => /[a-zA-Z]*\-thumb/ }
Run Code Online (Sandbox Code Playgroud)

我很想找到一种更简单的方法来做到这一点。(正如 tadman 指出的那样,我最好使用 nginx 重写来做这件事。请参阅这个相关问题:Routes.rb vs rack-rewrite vs nginx/apache rewrite rules

  • 或者,不知道这里的大图,看看回形针来处理图像附件......在这里使用 railscast:http://railscasts.com/episodes/134-paperclip (2认同)