PHPページでもページング分割機能を有功にする

Rainerテーマではクラシックテーマとは異なり、mt-search.cgiを使ったページ分割機能を多用するようになった。これまでもタグ検索やキーワード検索においてページ分割機能が使われてきたが、Rainierテーマではメインインデックスとアーカイブインデックスにおいてもページ分割機能がデフォルトで使用される。

後者の用途では、最初の一ページのみが静的に生成されたページで、2ページ目以降はmt-search.cgiにより動的に生成される。この場合、mt-search.cgiによるページ生成時に使用されるテンプレートは、検索用では無く静的に生成された1ページ目と同じテンプレートが使用される。

今回初めてこの機能を使った(というか標準機能なので体験したが正しい)のだが、メインインデックスページの2ページ目を開こうとクリックしたところ以下のエラーが出て動かず。

aspやphpの出力ファイルにはできません

色々調べて見るとこの機能は拡張子がhtmlでないと動かないらしい。

50%50%-hanhan-ver.4 » Movabletypeのページ送り機能4

まとめてみるとMTのページ送り機能は
・設定→アーカイブの設定→ファイルの拡張子はhtml
・メインページはhtml
・全てスタティック
という感じであれば動いてくれるみたいだ。

サイドメニューなどの別パーツ化を行う関係上、PHPインクルードを利用することは個人的に必須条件であるため、旧ブログで使っていた「htmlをphpとして動かす小技」でとりあえず回避。やりかたは単純で.htaccessに以下の記述を追加するだけ。

AddType application/x-httpd-php .html .htm

ただsixapartに問い合わせたところ以下の記述をmt-config.cgiに追加することでphpでも動作させるができるとのこと。

SearchAlwaysAllowTemplateID 1

このオプションについて調べてみると、どうやらMT4.31でにおいてセキュリティ対策として制限を掛けたようだ。

小粋空間: Movable Type 4.31 リリース

セキュリティ対策については、archive_type パラメータが存在する場合のみ、template_id パラメータを許容し、拡張子が php かasp である場合は、template_id パラメータの使用を許可しないようになりました。ただし、新たに追加された環境変数 SearchAlwaysAllowTemplateID により、常に template_id を使用することも可能です。

このオプション変数の標準ドキュメントは英語しか見当たらず完全に見落としていた。

SearchAlwaysAllowTemplateID | MovableType.org - Home of the MT Community

内容からするとCGIモードでPHPを動かしたときのセキュリティ対策のようなので、モジュールモードなら問題ないと判断してこちらのオプションを使用する方式に変更した。