我可以在路线中制定全能重定向规则吗?

时间:2014-06-20 17:40:27

标签: ruby-on-rails routes rails-routing

是否可以在我的路线中制作“全部捕捉”重定向规则,例如:

get "/foo*", to: redirect("/bar$1")

这将导致这些301:

  • / foo - > /酒吧
  • / foo / baz - > /酒吧/巴兹
  • / foo /?a = b - > /酒吧/?A = B

1 个答案:

答案 0 :(得分:0)

是的,你可以。以下是我之前做过的事情:

# config/routes.rb    

def get_params_blob_if_present(params)
  "/#{params[:a]}" if params[:a].present?
end

def get_query_string_params_if_present(params, options = {})
  params = params.except(:a) # Don't include blob params
  "?#{params.to_query}" if params.any?
end

MyApp::Application.routes.draw do
  # ...

  get '/foo(/*a)', to: redirect { |params, request| "/foo#{get_params_blob_if_present(params)}#{get_query_string_params_if_present(request.params)}" }

  # ...
end

基本上,(/*a)设置名为a的blob。然后,您可以在重定向URL中有条件地包含此blob中的参数(如果存在)。同样,您可以有条件地在重定向URL中包含查询字符串参数(如果存在)。