#next.js #react-i18next #nextjs-dynamic-routing
Вопрос:
У нас есть проект, содержащий один динамический маршрут [ProductID], и внутри этой страницы у нас есть несколько других страниц, которые включают дополнительные маршруты для всех. Вот структура папки «Страницы»:
[productId]
contentOne
[[...slugOne]]
Проблема в том, что необязательные уловки не работают должным образом всякий раз, когда страницы создаются статически. Экс:
ProductID/contentOne не работает, но ProductOne/contentOne/дополнительные работы
Проблема возникает только при развертывании в vercel. Все маршруты отлично работают на местных.
Вот getStaticPaths:
export async function getStaticPaths() {
return {
paths: [],
fallback: true,
}
}
Вот getStaticProps:
export async function getStaticProps({ locale }) {
return {
props: {
test: 'test',
...(await serverSideTranslations(locale, ['common'])),
}
}
}
Ответ №1:
При использовании getStaticPaths
для создания ваших страниц настройка { fallback: true }
не приводит к 404. Во время разработки это работает, потому что при разработке используется версия автоматической статической оптимизации, при которой Next обслуживает сайт, отображаемый сервером, даже если страницы будут статичными.
Если вы запускаете сайт SSR с Next, то при настройке fallback
будет отображаться статическая страница с пустыми реквизитами. Это ожидаемое поведение (если это то, что происходит с вами), и вы обязаны обрабатывать эту страницу либо перенаправляя на сторону клиента, либо показывая свою собственную страницу 404-го типа или отсутствующую страницу содержимого.
Если вы используете next export
для создания и экспорта своих страниц, то настройка fallback
ничего не делает (ожидаемое поведение при использовании next export
), что означает, что страница просто не будет существовать, и ваш сервер должен обработать 404, либо открыв страницу с ошибкой 404, либо перенаправив пользователя куда-либо еще.
Я не уверен, что вы подразумеваете под «не работает» — это ошибка 404 или пустая страница? В любом случае, вышеизложенное является причиной.
Комментарии:
1. Извините. ДА. Мы получаем 404 в прод. Мы используем ISR, а не следующий экспорт, и для стандартных маршрутов это приводит к созданию «на лету», что мы и намереваемся. Однако для приведенной выше стратегии маршрутизации, если мы предварительно построим, страницы будут работать нормально, но для маршрутов, которые мы не создали заранее, они не создаются на лету в prod, просто выдают клиентскую часть 404.
2. кстати. Я работаю с оригинальным плакатом, поэтому взял на себя смелость прокомментировать его от его имени 🙂
3. Эта ссылка предварительно собрана и работает: staging.ttwithme.com/primrose/social Этот не является предварительно встроенным и не работает: staging.ttwithme.com/expjazzandrade/social . В местном, оба работают
4. Под «не работает» я подразумеваю 404. Извините, что сначала не совсем ясно выразился. Итак, у нас есть пустая страница для тестирования, и страница возвращает 404. Ссылка: staging.ttwithme.com/dummy/test
5. @ExpeditoAndrade Я сталкиваюсь с этой проблемой, но вместо отступления: правда, я использую отступление: «блокировка». Вы пришли к какому-то решению?