在Rails路由中将路径重定向到新域

时间:2014-03-20 17:35:37

标签: ruby-on-rails ruby redirect routing

我想将一个站点上的一堆文件/文件夹的请求重定向到新站点上的目录(然后是相同的路径)。

在我的Rails routes.rb中我有:

match '/uploads/*path', :to => redirect{|params, request| "http://othersite.com/uploads/#{params[:path]}"}

我是从this answer获得的。

它几乎可以工作,除了这个URL:

http://currentsite.com/uploads/some/directories/filename.pdf

重定向到:

http://othersite.com/uploads/some/directories/filename

我无法理解文件扩展名丢失的原因。

(我还会在结尾处添加类似constraints: {:path => /[\w\-_\/]+(\.[a-z]+)?/}的内容,以确保路径模糊,但我在尝试解决此问题时已经将其关闭了。)

1 个答案:

答案 0 :(得分:4)

您想要包含请求格式:

match '/uploads/*path', :to => redirect{|params, request| "http://othersite.com/uploads/#{params[:path]}#{ '.'+params[:format] if params[:format].present? }"}

...这是我们认为是文件扩展名的URI部分(例如:.pdf)。

但是,使用完整的传入请求路径(通过request.full_path,它具有URI路径和所有查询参数)可能更优雅:

match '/uploads/*path', :to => redirect{|params, request| "http://othersite.com/uploads/#{ request.fullpath }" }