我想将一个站点上的一堆文件/文件夹的请求重定向到新站点上的目录(然后是相同的路径)。
在我的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]+)?/}
的内容,以确保路径模糊,但我在尝试解决此问题时已经将其关闭了。)
答案 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 }" }