nginx+phpで404エラーページをカスタマイズする

WEBサーバーにnginxを使用している場合、カスタム404ページを出す場合には

error_page 404 /404.html;

のように設定し、カスタムした404ページを404.htmlとして作成すれば表示されます。

ですが、phpを使用している場合

File not found. 

と表示されてしまい、カスタムされた404ページを表示することができません。

原因としてはconfファイルで

location ~ \.php$ {
    fastcgi_pass  unix:/var/run/php-fpm.sock;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include       fastcgi_params;
}

のように、拡張子の末尾がphpの場合はどうする、という処理を書いているため、404検知ではなくfastcgi_passに渡って、そのパスにかかれているソフトウェアが入力スべきphpファイルがないよ、とエラーを吐いてしまう為です。

解決方法は単純で、

fastcgi_intercept_errors on;

という記述を足すだけです。

以下がphpファイルの場合でも、カスタムされた404を出す書式です。

location ~ \.php$ {
    fastcgi_pass  unix:/var/run/php-fpm.sock;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include       fastcgi_params;
    fastcgi_intercept_errors on;
}

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です