Rails: перенаправить все неизвестные маршруты в root_url - PullRequest
38 голосов
/ 09 ноября 2010

Всякий раз, когда пользователь заходит не на ту страницу, rails показывает 404.html из общей папки.Однако я бы хотел просто перенаправить браузер на корневую страницу, ничего не показывая.Таким образом, я попытался потерпеть неудачу, но безрезультатно, он все еще показывает страницу 404.Вот выдержка из моего файла маршрутов:

# ...
map.root :controller => 'home', :action => 'home'
map.connect '*', :controller => 'home', :action => 'home'

Есть предложения?Спасибо, ребята!

Ответы [ 5 ]

75 голосов
/ 09 ноября 2010

Если ваш проект работает на rails 3, просто добавьте эту строку в ваши маршруты. Rb

match '*path' => redirect('/')

Редактировать: если вы на Rails 4 или 5

match '*path' => redirect('/'), via: :get

или

get '*path' => redirect('/')
19 голосов
/ 09 ноября 2011

Как ответ Аркана.Один момент, если не хотите такого поведения в среде разработки, то можете сделать -

match '*path' => redirect('/')   unless Rails.env.development?
10 голосов
/ 25 сентября 2013

Рельсы 4-

( routes.rb )

Вы все еще можете использовать простой get для перенаправления всех неизвестных маршрутов.

  get '*path', to: 'home#index'

Если вы хотите обеспечить маршрутизацию для запросов POST и GET, вы все равно можете использовать match, но Rails хочет, чтобы вы указали метод запроса через via.

  match "*path" => "home#index", via: [:get, :post]  

Помните, что routes.rb выполняется последовательно (соответствует первому маршруту, который соответствует предоставленной структуре пути), поэтому поместите подстановочный знак в нижней части совпадений.

1 голос
/ 22 октября 2018

Кажется, есть ошибка в rails 5.2, когда маршруты active_storage подобраны путём перехвата, что приводит к неработающим ссылкам на загруженные изображения.О проблеме сообщалось в репозитории rails на github, и кто-то комментировал приведенный ниже патч, пока ошибка не будет исправлена ​​в новом выпуске:

В routes.rb прямо перед последним end

get '*all', to: 'application#index', constraints: lambda { |req|
    req.path.exclude? 'rails/active_storage'
  }

затем в контроллере приложения добавьте:

def index
  flash.notice = 'No page found at that address'
  redirect_to root_path
end
1 голос
/ 09 ноября 2010

Для этого нужно создать контроллер

class RedirectsController 

  def index
    redirect_to root_url
  end
end

А на твоих маршрутах

map.connect '*', :controller => 'redirects', :action => 'index'
...