PHP を CGI モードで動作させた場合に 404 Not Found ではなく 200 OK を返してしまう
PHP を CGI モードで動作させている Drupal サイトでは、存在しないページやアクセスが許可されていないページを表示した場合に、正しい HTTP レスポンスヘッダを返さない。
通常は、存在しないページの場合 404 Not Found を返し、アクセスが許可されていないページの場合 403 Forbidden を返すはずなのだが、どちらとも 200 OK を返してしまうので、削除したページがいつまでもサーチエンジンにインデックスされたままになってしまうなどの問題が発生してしまう可能性がある。
common.inc の内容を変更することで解決。
この問題を解決するためには、includes/common.inc ファイルの該当箇所の内容を強調部分のように変更します。
/**
* Generates a 404 error if the request can not be handled.
*/
function drupal_not_found() {
drupal_set_header('HTTP/1.1 404 Not Found');
----- 中略 -----
/**
* Generates a 403 error if the request is not allowed.
*/
function drupal_access_denied() {
drupal_set_header('HTTP/1.1 403 Forbidden');/**
* Generates a 404 error if the request can not be handled.
*/
function drupal_not_found() {
drupal_set_header('Status: 404 Not Found');
----- 中略 -----
/**
* Generates a 403 error if the request is not allowed.
*/
function drupal_access_denied() {
drupal_set_header('Status: 403 Forbidden');
一部のサーバでは PHP が セーフモードであるなどの理由から、PHP を CGI モードで動作させる方法でのインストール方法を紹介をさせていただいていますが、Drupal 4.7 当時(それ以前は調べていません)から、PHP を CGI モードで動作させた場合の問題点として、正しい HTTP レスポンスヘッダを返さないという内容が話題に上がっていたようです。
実際にブラウザを利用して閲覧している場合には HTTP レスポンスヘッダを意識する必要はないのですが、サーチエンジンのロボットなどに対して正確な情報を伝えるということは SEO の一環として重要な要素だと思われます。
[参考]
Problem with 404 when PHP is CGI / Rewrite rules | drupal.org
HTTP レスポンスヘッダ | Drupal.0829.info
トラックバック
トラックバックは承認後に表示されます。
URLから "-nospam" を削除してトラックバックを送信してください。