【Next.js】trailingSlashをtrueにするとデフォルトの404エラーが発生する
目次
環境
- "next": "13.0.2"
事象
next.config.jsでtrailingSlashをtrueにするとデフォルトの404エラーが発生する
next.config.mjs
const nextConfig = {
trailingSlash: true,
}
デフォルトの404エラー
▼表示されてほしい404エラー
原因
trailingSlashをtrueにすると、next export
した際のoutディレクトリ内のファイル名にindex.html
が付与されるため、デフォルトの404エラーが発生する。
▼trailingSlash = true
の場合のoutディレクトリ
out
├── hoge
│ └── fuga
│ ├── title1
│ │ └── index.html
└── 404
└── index.html
▼trailingSlash = false
の場合のoutディレクトリ
out
├── hoge
│ └── fuga
│ └── title1.html
└── 404.html
通常であれば、404.htmlがルートディレクトリ配下にあれば表示ができるが、404フォルダは以下のindex.htmlでは表示することができない。
解決策
next export
後に、404フォルダのindex.htmlをルートディレクトリ配下に404.html
の名前でコピーする。
package.json
{
"scripts": {
"export": "npm run build && next export",
"postexport": "node ./scripts/post-export.js",
}
}
post-export.js
const {
writeFile,
readFile,
} = require("fs").promises;
const { join } = require("path");
const main = async () => {
const file = await readFile(join(__dirname, "../out/404/index.html"));
await writeFile(join(__dirname, "../out/404.html"), file);
};
main();