CGI モードの PHP 環境で動作している Drupal サイトで、存在しないコンテンツをリクエストすると、HTTP レスポンスのステータスが 404 ではなく 200 になってしまう問題について。
http://drupal.org/node/6678
http://drupal.org/node/64645
http://drupal.org/node/81752
http://drupal.org/node/117756
http://drupal.org/node/175855
・・・
たとえば、XREA や CORESERVER で PHP の safe モードの制約を回避すべく CGI モードで動作させると、この問題に遭遇する。
このままでも動作はするけれど、たとえば、Google ウェブマスターツールでサイトマップを登録しようとして失敗したり、検索エンジンのインデックスに 「ページが見つかりません」 というページが登録されてしまったりする。
1つの対処法:
1)ページなどのノードを1つ作成する。
2)タイトルを「お探しのページは見つかりませんでした」 などと設定する。
3)本文を次のように設定する:
<?php drupal_set_header('Status: 404 Not Found'); ?>
お探しのページは見つかりませんでした。
4)入力書式を 「php code」 に設定して保存する。
5)/admin/settings/error-reporting を開く、
6)デフォルトの 404 ページとして上で作成したノードを指定する。