PHPファイルの先頭に「-」があると500エラー
さくらインターネットのPHPをバージョン5にアップデートしたからなのか、その以前からなのか、発生時期は分かりませんが、Movable Typeで運営しているブログの一部のエントリーが 500 Internal Server Error で閲覧できなくなっていました。
Internal Server Errorの原因
ファイル名の先頭が -(ハイフン) になっているエントリーのみがエラーを返します。下記サイトによると、PHPの仕様上、ファイル名の先頭にハイフンは使用してはダメとのこと。
ファイル名の先頭に「- (ハイフン)」で「Internal Server Error」(その3)
とはいえ、この現象はある特定条件が重なったときに起こることも分かりました。
・ アーカイブオプションで、ファイルの拡張子を「php」にしている
・ 「ブログ記事」テンプレートのアーカイブマッピングパスが初期設定のまま
例 ) yyyy/mm/entry-basename.php
・ エントリーのタイトル内に、「半角スペース+英数字」という組合せがある
・ (サーバーがさくらインターネットである?)
対策方法
今回はアーカイブマッピングパスを変更することで対処しました。Movable Typeが管理するエントリー毎のID(MTEntryID)をファイル名にします。これなら今後エントリーにどんな変更を加えても、ファイル名が変更されることはありません。
entry/<$MTEntryID pad="1"$>.php

ただし、全ブログ記事のファイル名が代わってしまうため、
・ YahooやGoogleへのインデックスがリセットされる
・ エントリーに個別リンクされてる場合、URL変更が必要
というデメリットがあります。が、今回エラーを出しているサイトは個人ブログがメインなので割り切りました。ファイル名を変更せず、サーバーやPHP側の設定を変更する方法も調べましたが、力及ばず見つけられませんでした。
