404ページをカスタマイズする場合の注意

symfonyで404ページをカスタマイズする場合、setting.yml 内の以下の設定を有効にして該当するアクションの出力をカスタマイズします。

#all:
#  .actions:
#    error_404_module:       default   # To be called when a 404 error is raised
#    error_404_action:       error404  # Or when the requested URL doesn't match any route

素直に error404 というアクションを作成すれば、特に問題はありません。

今回私が少しハマったのが、404 の場合に特別なエラーページを表示せず、サイトのトップへ誘導しようと思い、

all:
  .actions:
    error_404_module:       document   # To be called when a 404 error is raised
    error_404_action:       index  # Or when the requested URL doesn't match any route

と、サイトのトップページ用のモジュール/アクションをそのまま指定しまいました。
このようにすると、ブラウザでの表示は一見問題ないように見えるのですが、Firebug などでレスポンスヘッダを見てみると、常に 404 として返されてしまいます。これは非常に気持ち悪いですよね。
また、この状態ではページのキャッシュなども有効に機能しません。

404 の場合にトップページに誘導したい場合でも、1 つ 404 用のアクションを用意して、そのアクションからトップページ用のアクションへ forward してやることで、このような挙動を回避できます。

★ただし、このように forward すると、当然ですが、ブラウザへのレスポンスコードは 404 ではなくて 200 になります。