Nextraで静的サイトジェネレーター(SSG)を利用してサイトを公開したときに、ページにアクセスすると404 Not found
のエラーが出る場合の対処方法を紹介します。
原因
Nextraでnpm run build
を実行するとout
ディレクトリに静的ファイルが生成されます。このとき、out
ディレクトリには静的に生成されたHTMLファイルが生成されます。
しかし、Nextraで生成されたWebサイトはシングルページアプリケーションのようにルーターでページを切り替えているため、各ページのリンクは.html
なしのURLになっています。
トップページからアクセスして各ページに遷移すればそのルーターが働いてページが表示されますが、直接各ページのURLにアクセスすると、ルーターが機能せず、.html
なしでリクエストしてもファイルしか存在しないため404 Not found
のエラーが出てしまいます。
解決策
Nextraで生成されたWebサイトはシングルページアプリケーションのようにルーターでページを切り替えているため、各ページのリンクは.html
なしのURLになっています。
そのため、.html
なしのURLにアクセスしたときは、.html
を付与してリダイレクトするように設定する必要があります。
一番簡単なのは次の.htaccess
をルートディレクトリに配置する方法です。
.htaccess
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.html [NC,L]
この.htaccess
をWebサーバのルートディレクトリに配置すると、.html
なしのURLにアクセスしたときは、.html
を付与してリダイレクトするようになります。