以下の内容はhttps://uga-box.hatenablog.com/entry/2024/06/19/000000より取得しました。


【Next.js】dynamicルートじゃないindexルートのrewrite設定

Next.js v14で/fooというリクエストがあった時に、URLはそのままで/foo/barというページを表示させるようにrewriteしたい

この時、フォルダの階層は以下のようになっていて、/fooはindexルートと呼ばれるルーティングになっている(foo.tsx, bar.tsxでもいい)

├── pages
│   ├── foo
│   │   └── index.tsx
│   ├── bar
│   │   └── index.tsx

この時、rewriteの設定をnext.config.jsに書くのだが、以下のように書いてもrewreiteがされなかった

module.exports = {
  async rewrites() {
    return [
      {
        source: '/foo',
        destination: '/bar',
      },
    ]
  },
}

ドキュメントを確認したところ、rewrites関数で配列を返す場合、ファイルシステム(page および /publicファイル)のルーティングチェック後、dynamicルートのルーティングチェック前にrewriteが適用されるとのこと

When the rewrites function returns an array, rewrites are applied after checking the filesystem (pages and /public files) and before dynamic routes.
next.config.js Options: rewrites | Next.js

つまり、/fooはpageに該当するため、rewrite前にルーティングチェックが終わってしまっていることになる

この制御を変えるには、配列ではなく、beforeFilesafterFilesfallbackをキーに持つオブジェクトを返すようにする必要がある

beforeFilesファイルシステムのルーティングチェック前にrewriteさせたい設定を記載する時のためで、今回はこれを使う必要があった

module.exports = {
  async rewrites() {
    return {
      beforeFiles: [
        {
          source: '/foo',
          destination: '/bar',
        },
      ]
    }
  },
}

配列を返す時と同じ設定はafterFilesであり、ファイルシステムとdynamicルートの両方のチェック後にrewriteを適用させたい場合はfallbackを使う




以上の内容はhttps://uga-box.hatenablog.com/entry/2024/06/19/000000より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14