NextJS Необязательный перехват всех маршрутов, которые не работают при развертывании
У нас есть проект, содержащий один динамический маршрут [productId], и внутри этой страницы у нас есть несколько других страниц, которые включают необязательные маршруты для приема всей почты домена. Вот структура папки страниц:
[productId]
contentOne
[[...slugOne]]
Проблема в том, что необязательный комплексный прием не работает должным образом всякий раз, когда страницы создаются статически. Пример: productId / contentOne не работает, но productOne / contentOne / extra работает. Проблема возникает только при развертывании в vercel. Все маршруты отлично работают на локальных.
Вот getStaticPaths:
export async function getStaticPaths() {
return {
paths: [],
fallback: true,
}
}
Вот getStaticProps :
export async function getStaticProps({ locale }) {
return {
props: {
test: 'test',
...(await serverSideTranslations(locale, ['common'])),
}
}
}
2 ответа
У нас есть открытая проблема для этого: https://github.com/vercel/next.js/issues/30631
Между тем, нам пришлось использовать перезапись (это входит в файл next.config):
async rewrites() {
return {
beforeFiles: [
{
source: '/:productId/contentOne',
destination: '/:productId/contentOne/index'
}
]
}
Когда используешь
getStaticPaths
для создания ваших страниц, установив
{ fallback: true }
не приводит к ошибке 404. Во время разработки это работает, потому что при разработке используется версия автоматической статической оптимизации, в которой Next обслуживает сайт, отображаемый на сервере, даже если страницы будут статичными.
Если вы используете SSR-сайт с Next, то при настройке будет отображаться статическая страница с пустыми реквизитами. Это ожидаемое поведение (если это то, что происходит с вами), и вы обязаны обрабатывать эту страницу либо путем перенаправления на стороне клиента, либо путем отображения вашей собственной страницы 404-типа или отсутствующей страницы содержимого.
Если вы используете для создания и экспорта своих страниц, тогда настройка
fallback
ничего не делает (ожидаемое поведение при использовании
next export
), что означает, что страницы просто не будет, и ваш сервер должен обработать 404, либо обслуживая страницу с ошибкой 404, либо перенаправляя пользователя в другое место.
Я не уверен, что вы имеете в виду под словом «не работает» - это ошибка 404 или пустая страница? В любом случае, вот почему.