ページは表示されるのに HTTPステータスが404 Not Found
このサイトを運用していて、なんとも不思議な事象に遭遇しました。
フロントページの話なのですが、ページは表示されているのになぜかHTTPステータスコードが404(ページが見つからない)を返すのです。人間には見えてもコンピュータにページが見えてないということは、平たくいうと検索エンジンにピックアップしてもらえないということです。これはヒジョーにまずい。まずすぎる。もう一杯!
(たまたま、Facebookのデバッガーを使っていて判明した現象でした)
で、トライアンドエラーを繰り返して、まずは以下のことがわかりました。
- テーマを『スケルトン』に変えても、フロントページのみ404を返してくる
- app/webroot/index.php の中身を入れ替える(echo 'hello world' とだけ書いた)と、200を返してくる(hello worldも表示された)
- テーマディレクトリ内の layouts/default.php に $bcBaser->isHome() で条件分岐している箇所があり、それについては正常に機能している
- フロントページでは $bcBaser->contentsName() が「Error」という文字列で出力される
-
デバッグモード1で動作させたところ、フロントページのみ、白い背景で下記URLに示すメッセージが出てきた
https://gist.github.com/tecking/d68e9766c93e14064ae5
WordPressだと、オリジナルで作ったテーマに不備があってエラーを起こしている→デフォルト(今だと『Twenty Thirteen』ですね)に戻して直る……というケースが多いのですが、今回の場合baserCMSに同梱されているテーマ『スケルトン』に変えても現象が変わらないのでテーマの問題ではなさそう。
baserCMSのフォーラムでも助けていただきながら突き詰めていった結果、デバッグモード時のメッセージにヒントがありました。ググったら下記のスレッドがヒットしたのです。
2.0インストール完了しましたが、トップページが表示されません|フォーラム|baserCMSユーザーズ
http://forum.basercms.net/modules/newbb/viewtopic.php?viewmode=flat&topic_id=605&forum=2
原因は app/webroot/themed/foo/pages 内に index.php(フロントページのコンテンツ部分が記述されている)がなかったことでした。
そこで、baserCMS管理画面の[新規固定ページ登録]より
- ページ名……index
- タイトル……(なし)
- 本文……なし
のページを作ったところ app/webroot/themed/foo/pages 内に index.php ができステータスも200を返すようになりました。
(トップページのコンテンツはテンプレートにべた書きなので、本サイトの場合本文なしでオッケイなのでした)
baserCMSで「保存中にエラーが発生しました。」のアラートが出てしまったらの記事でも書いたように、baserCMSはデータベースとPHPファイルという二つの方法でコンテンツのデータを保持しています。そのため app/webroot/themed/foo/pages 内に index.php がない=ページが存在しない とbaserCMSが判断し、HTTPステータスコード404を出力したのではないでしょうか。
(baserCMSなのかCakePHPなのか、どちらに起因する現象なのか判断がつかないのですが)
不思議な現象に遭遇したことでまた一つ学んだ、baserCMSとWordPressとの違い。トップページも[新規固定ページ登録]で作っておく、というのはbaserCMSのお作法なんでしょうか?>識者