今回はNginx環境でWordpressを導入した後、記事ページを開いた際に”404 Not Found”のエラーが出る原因と対処方法について解説します。
エラーが出る原因
エラーが出る条件としてはWordpressの設定で以下のようにパーマリンクを変更した場合が挙げられます。

このように記事のURLを分かりやすくするためにパーマリンクをデフォルトの”基本”から”投稿名”に変更した際にエラーが出ました。
エラーが出るのは”投稿名”に変更した場合に限られず、デフォルトの設定以外を選んだ場合は同じくエラーが出ました。
WordPressの記事URLは実際のファイルではなく、index.phpを通して処理されます。
しかしNginxの設定で、存在しないURLをWordPressへ渡さず404として処理してしまう場合、記事ページが表示されなくなります。
ちなみに「?p=6」のようなデフォルトURLの場合は、最初からindex.phpに処理が渡る仕組みになっているため、今回のようなtry_filesの設定の影響は受けにくくなっています。
エラーの対処方法
まずはNginxの設定ファイルを以下のコマンドで開きます。
sudo nano /etc/nginx/sites-available/default
中身を確認すると以下のような内容の記述がありました。
try_files $uri $uri/ =404;
これはNginxが該当のファイルがあるかどうかを確認して、見つからない場合は404を返すという内容になります。
正しくは該当のファイルがない場合は404を渡すのではなく、Wordpress側に処理を渡す必要がありますので、index.phpへ処理を渡すように書き換えます。(WordPressはphpで動いているため。)
書き換え内容は以下の通りです。
try_files $uri $uri/ /index.php?$args;
これで該当のファイルが見つからない場合はWordpress(index.php)側へ処理を渡すようになり、動的処理がされることで、正しいページが表示されるようになるかと思います。
まとめ
今回の内容で、Nginx自体にはURLの動的処理が行えないことを理解しました。
デフォルトのURL形式”?p=番号”は一般的なURLとは異なり、記事内容が分かりにくいため、パーマリンクの変更が推奨されます。
ただし設定を変更すれば、今回のような問題に直面する可能性がありますので、是非参考にしていただければと思います。