【问题标题】:Can I make a catch-all redirect rule in my routes?我可以在我的路线中制定一个包罗万象的重定向规则吗?
【发布时间】:2014-08-11 12:56:35
【问题描述】:

是否可以在我的路线中制定一个“catch all”重定向规则,例如这样的:

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

这将导致这些 301:

  • /foo -> /bar
  • /foo/baz -> /bar/baz
  • /foo/?a=b -> /bar/?a=b

【问题讨论】:

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


    【解决方案1】:

    是的,你可以。以下是我之前的做法:

    # 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。然后,您可以有条件地将此 blob 中的参数包含在重定向 URL 中(如果存在)。同样,您可以有条件地在重定向 URL 中包含查询字符串参数(如果存在)。

    【讨论】:

    • 好的,所以没有官方方法。感谢您分享您的解决方案!
    猜你喜欢
    • 2011-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-19
    相关资源
    最近更新 更多