Не теряйте нервы из-за этого
Итак, вы наконец завершили работу над приложением React, над которым работали, и развернули его на Netlify. Все выглядит прекрасно, вы испытываете теплое чувство удовлетворения от хорошо выполненной работы.
Пока вы не поймете...
Попыткаполучить прямой доступ к подмаршруту приводит к ошибке 404!
Но почему?
Ну, проблема в том, что React Router обрабатывает маршрутизацию на стороне клиента (в браузере), но Netlify по умолчанию рассматривает вашу страницу как статический веб-сайт и не настроен для правильной обработки маршрутизации на стороне клиента.
Что это значит?
React — это одностраничное приложение (SPA). В вашем проекте может быть много компонентов и «страниц», но на самом деле весь контент в SPA находится в одном HTML-файле. В случае React это обычно index.html в вашей папке /public.
Затем маршрутизация обрабатывается на стороне клиента вашей структурой маршрутизатора. Когда вы переходите по разным маршрутам в своем одностраничном приложении, React динамически отображает и обновляет содержимое без перезагрузки всей страницы.
Теперь мы подходим к моменту, когда возникает проблема...
Сервер не понимает этот механизм маршрутизации на стороне клиента. Как мы уже говорили ранее, по умолчанию ваш SPA рассматривается как статический веб-сайт. Поэтому, если вы попытаетесь напрямую ввести определенный URL-адрес и получить к нему доступ, сервер будет искать соответствующий статический файл для этого маршрута.
Но, как вы уже догадались, его там нет.
Сейчас уже не 1990-е, и мы используем React, на самом деле мы не обслуживаем статические файлы.
Забавный факт!
В настоящее время менее 2% веб-сайтов являются статическими.
Как это исправить?
Как всегда, ответ частично можно найти в Документации Netlify, но не всегда удается его найти. В конце концов, именно поэтому мы пишем эти статьи... чтобы делиться знаниями и помогать нуждающимся разработчикам.
Давайте перейдем к делу.
Шаг 1:
Создайте netlify.toml в корне репозитория, если у вас его еще нет. Если вы это сделаете, работайте в рамках уже существующего.
Это файл конфигурации Netlify, определяющий различные параметры развертывания Netlify, одним из которых является маршрутизация.
Шаг 2:
Добавьте следующий скрипт в файл netlify.toml:
[[redirects]] from = "/*" to = "/index.html" status = 200
Давайте немного разберем это.
[[redirects]] в первой строке указывает, что мы будем определять правила перенаправления в следующих строках.
[[redirects]]
Далее следует from = “/*”определение шаблона маршрута для сопоставления и перенаправления.
from = "/*"
В третьей строке у нас есть to = “/index.html”. Он сообщает серверу место назначения перенаправления.
to = "/index.html
Наконец, у нас есть status = 200.Эта строка определяет код состояния HTTP для ответа перенаправления.
status = 200
Заключение
Вот и все, довольно простое решение неприятной проблемы.
Спасибо, что дочитали до конца! Если вы нашли эту статью полезной, рассмотрите возможность оставить комментарий, подписаться или несколько хлопков (да, вы можете сделать больше).