うまいぼうぶろぐ

linuxとhttpdとperlのメモ

htmlにヘッダ、フッタを挿入するmod_layoutを使ってみた

コンテンツ作ってる人がやたらと.htmlでSSIを使いたがるので理由を聞いたところ、「ページのヘッダとフッタ、メニューで共通の部分があるから」と答えが返ってきた。なるほど。でも、それmod_layoutで出来るよ。サーバ負荷の面ではSSIよりmod_layoutのほうが有利そうだし。
とはいえ、コンテンツの作り方が変わると運用負荷が上がるので、よほど特別なサイトでなければやらないだろうけど。後学のために動作確認。

httpd.conf

.htmlにLAYOUTフィルタを設定する。

<Location /layout/>
  AddOutputFilter LAYOUT .html
  LayoutHeader    /header.html
  LayoutFooter    /footer.html
  LayoutIgnoreURI /layout/nolayout/*
</Location>

基本的にこれだけ。簡単だ。

mod_deflateとの組み合わせ

DEFLATEフィルタと組み合わせると動かなかった。LayoutHeader、LayoutFooterのhtmlは圧縮されないけど、アクセスしたhtmlだけが圧縮されていた。

$ curl http://www.example.com/layout/ -H 'Accept-Encoding: gzip' 2> /dev/null | zcat -
zcat: stdin: not in gzip format
$ curl http://www.example.com/layout/ -H 'Accept-Encoding: gzip' 2> /dev/null 
header test <br>
?())????,???*??I??/-?/I-.???KI???(??Q?I*??
                                          c*footer test <br>
対応策

こないだ試行錯誤した方法で、mod_layout対象のページを強制的に非圧縮にして回避した。なんだかなぁ。