mod_layoutで自動的にHTMLを組み込む

Apacheのmod_layoutは、htmlの<body>タグの直ぐ後か、</body>タグの直ぐ前に外部のhtml文を自動挿入してくれるモジュールです。

これを使うと、ページに共通のヘッダー部分やフッター部分を一つのhtmlにまとめておけば、個別のhtmlに書くことなく、Apacheが自動挿入してくれます。
機能的にはSSIに近いのですが、決まりきった場所への挿入なので、Webサーバーの負荷もあまり高くないようです。


mod_layoutのインストール


mod_layoutのモジュールは、このサイト(TangentOrg->software() )からソースをダウンロードしてきて、コンパイルするだけです。

今回テストしたサーバーは、DebianパッケージでApacheをインストールしてあったので、mod_layoutもパッケージインストールするだけでOKでした。




# apt-get install libapache2-mod-layout

Reading Package Lists... Done
Building Dependency Tree... Done
The following NEW packages will be installed:
  libapache2-mod-layout
0 upgraded, 1 newly installed, 0 to remove and 2 not upgraded.
Need to get 13.2kB of archives.
After unpacking 44.0kB of additional disk space will be used.
Get:1 ftp://ftp.jp.debian.org stable/main libapache2-mod-layout 4.0.1a-2.2 [13.2kB]
Fetched 13.2kB in 3s (4408B/s)         
Selecting previously deselected package libapache2-mod-layout.
(Reading database ... 15425 files and directories currently installed.)
Unpacking libapache2-mod-layout (from .../libapache2-mod-layout_4.0.1a-2.2_i386.deb) ...
Setting up libapache2-mod-layout (4.0.1a-2.2) ...

# a2enmod layout
Module layout installed; run /etc/init.d/apache2 force-reload to enable.

# /etc/init.d/apache2 force-reload
Forcing reload of web server: Apache2.



あとは.htaccessか、httpd.conf(パッケージの場合は/etc/apache2/sites-available/default)に、組み込むhtmlファイルを設定すれば、簡単に組み込まれます。

#  vi .htaccess
-----------------------------------------------------下記の行を追加
 AddOutputFilter LAYOUT html htm →拡張子がhtmかhtmの場合に挿入される
 LayoutHeader /header.html
 LayoutFooter /footer.html

 
上記の例では、<body>タグ直下にheader.htmlの内容が、</body>直前にfooter.htmlの内容が自 動的に書き込まれます。 html文の挿入なので、挿入されるファイルには<body>部の中身だけを記述すればOKです。

AddOutputFilter LAYOUTの後には、挿入したいファイルの拡張子を並べます。
例えば、CGIやPHPにも挿入したい場合は、 AddOutputFilter LAYOUTの後に cgi php と記述すればいいわけです。


プログラムを挿入する


mod_layoutは実行可能なスプリクトも挿入することが可能です。
その場合は、LayoutHeaderやLayoutFooterにスプリクト名を指定すればいいのですが、 挿入されるスプリクトには必ず、「Content-Type: text/html」が必要になります。

例えばPHPだと

 

header("Content-Type: text/html; charset=Shift_JIS");


といった感じです。
この方法で、アクセスカウンターなどは簡単にできますね。