Как я могу создать маршрут Rails 3, который будет соответствовать всем запросам и напрямую на один ресурс/страницу?
У меня есть приложение rails (Rails 3.0), которое мне нужно временно вывести из строя. Пока это действует, я хочу создать новый маршрут, который будет направлять все запросы на один кусок статического контента. У меня есть контроллер, настроенный для обслуживания моих статических страниц.
Я пробовал что-то вроде этого:
match '*' => 'content#holding'
и
match '*/*' => 'content#holding'
чтобы соответствовать шаблону подстановочного знака, как описано здесь: Rails 3 маршрутизации globbing без успеха.
Это, вероятно, очень простой ответ, но я не мог понять.
/EDIT/
Забыл упомянуть, что у меня было это правило в самом верху моего файла route.rb.
Ответы
Ответ 1
Rails необходимо связать параметры url с переменной, попробуйте следующее:
match '*foo' => 'content#holding'
Если вы также хотите сопоставить /
, используйте скобки, чтобы указать, что foo
является необязательным:
match '(*foo)' => 'content#holding'
Ответ 2
Я сделал это только вчера и первым придумал решение, которое показывает klochner.
То, что мне не понравилось в этом, заключается в том, что все, что вы входите в URL-адрес, остается там после загрузки страницы, и поскольку я хотел, чтобы весь маршрут переадресовывался на мой root_url, это было не очень привлекательно.
Что я придумал, выглядит так:
# in routes.rb
get '*ignore_me' => 'site#unknown_url'
# in SiteController
def unknown_url
redirect_to root_url
end
Не забудьте вставить запись маршрутов в самую нижнюю часть файла!
EDIT:
Как заметил Ник, вы также можете сделать перенаправление непосредственно в файле маршрутов.
Ответ 3
Где в "routes.rb" находится ли эта строка?
Чтобы иметь приоритет над другими маршрутами, он должен быть помещен первым.
В качестве альтернативы вы можете посмотреть на это: http://onehub.com/blog/posts/rails-maintenance-pages-done-right/
Или это: Rails: режим обслуживания только для администратора
Ответ 4
Я столкнулся с чем-то вроде этого, где у меня были имена доменов в качестве параметра в моем маршруте:
match '/:domain_name/', :to => 'sitedetails#index', :domain_name => /.*/, :as =>'sitedetails'
Ключ к этому был /.*/, который был подстановочным значком для почти всего. Так что, возможно, вы могли бы сделать что-то вроде:
match '/:path/', :to => 'content#holding', :path=> /.*/, :as =>'whatever_you_want'