はじめに
React
で制作したアプリをVercel
にデプロイした際、ビルドエラーは出ていないのに/
以外のページが404 Not Found
になってしまいました。特に/:id
のページが表示できなかったので、その解決方法をまとめました。
この記事は個人的なアウトプットを目的として作成したものです。そのため、誤った情報や不足している内容が含まれている可能性があります。もし間違いや気になる点がございましたら、ぜひご指摘いただけますと幸いです。
原因
Vercel
がReact
のサブページを認識できていないことが原因です。
Vite
とReact Router
を使用した場合はクライアントサイドルーティングを採用しているため、ブラウザで/:id
に直接アクセスすると、Vercel
のサーバーはindex.html
ではなく404 Not Found
を返してしまいます。
解決方法
Vercel
にrewrites
を設定し、どのルートでもindex.html
を返すようにします。
{
"rewrites": [
{
"source": "/:hoge",
"destination": "/index.html"
}
]
}
この設定により、/:hoge
へのアクセスがindex.html
にリダイレクトされ、React
のルーティングが正しく機能するようになります。
終わりに
この問題はNext.js
では発生しないため、React
とNext.js
の違いを意識することが重要です。今後もそれぞれのメリット・デメリットを理解しながら、適切なフレームワーク選びをしていきたいと思いました。