Възможно ли е да направя правило за пренасочване „улавяне на всички“ в моите маршрути, например нещо подобно:
get "/foo*", to: redirect("/bar$1")
Което ще доведе до тези 301:
- /foo -> /bar
- /foo/baz -> /bar/baz
- /foo/?a=b -> /bar/?a=b
Възможно ли е да направя правило за пренасочване „улавяне на всички“ в моите маршрути, например нещо подобно:
get "/foo*", to: redirect("/bar$1")
Което ще доведе до тези 301:
Да, можеш. Ето как съм правил това преди:
# 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
. След това можете условно да включите параметрите от този петно в URL адреса за пренасочване, ако има такива. По същия начин можете условно да включите параметри на низ на заявка в URL адреса за пренасочване, ако има такива.