以前、さくらレンタルサーバーにおいて、HTMLファイルでPHPを動かす方法を書きましたが、実はこれには弊害がありました。
当サイトでは、404エラー(指定されたページ・ファイルが見つからない場合)と403エラー(指定されたページ・ファイルへのアクセス権が無い場合)のページを自作しており、ブラウザ側の物ではなく、自作ページを.htaccessを利用して表示しています。(今は非常に簡素ですが、その内ちゃんとしたページを・・・。)
しかし、HTMLファイルでPHPを動かす場合、「.html」が付く間違ったURLを入力しても、ブラウザ側の404エラーが表示されてしまいます。これは、さくらレンタルサーバーではCGI版PHPとして動かしており、それが返す404エラーを.htaccessが認識しないからだそうです。
そこで、phpを動かす前に.htaccessで存在をチェックして、存在しない場合はさっさと404エラーを表示させます。その為には.htaccessに次のような記述を追加します。赤字部分はファイルパスですので場合に応じて変更。また、.phpファイルが存在しない場合は、最後の3行は必要ありません。
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.html$) /404.html [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.php$) /404.html [L]
こうすることで見かけ上は404エラーページが表示されます。が、実はこのままでは、ただ単に404エラーページが表示されただけで、HTTPステータスコードは200(問題なくページを発見)を返してしまいます。そこで、404エラーページにPHPコードを書き足して、404を返すようにしなければなりませんので、エラーページの1行目(htmlソースの1行目。<head>や文書型宣言よりも前。)に次のコードを追加してください。
<?php header(“HTTP/1.1 404 Not Found”);?>
以上で、この問題は解決するはずです。本来もう少し根本的に説明すべきですし、私自身apacheやphpには詳しくないので背伸びしすぎた記事ですが、少なくとも私は成功していますし、検索してもなかなか出てこない情報のようなので半分メモとしてUPしました。もし何か問題があればコメントいただけると助かります。
なお、これが成功したかどうかはFirefoxのアドオンである「Live HTTP headers」などで確認できます。