9.13. SSIを使用する(mod_include)

SSI(Server Side Includes)を有効にするには mod_include モジュールで提供される INCLUDES フィルタを使用します。

フィルタとは、Aapche2.0 以降の機能であり、クライアントとサーバーの間で送受信されるデータへの処理プロセスです。クライアントからサーバーに送られるデータは入力フィルタとして、サーバーからクライアントへのデータは出力フィルタとして処理することにより、Apache に入出力されるデータを加工するためのメカニズムを提供します。Apache1.3 まではハンドラとして実装されていた SSIも、Apache2.0 からはフィルタとして提供されています。

SSI は、動的なコンテンツを提供する仕組みの 1 つです。CGI スクリプトなどが HTML ファイルのすべてを生成するのに対し、SSI では、静的な HTML ファイルの一部にコマンドの実行結果を組み込みます。例えば、HTML ファイルにタイムスタンプやコピーライトなどを挿入する際に利用されています。Apache1.3 で SSI を有効にするには、AddHandler ディレクティブを使用して設定しました。

これに対し、Apache2.0 以降では SSI を有効にするには、AddOutputFilter ディレクティブを使用します。書式は以下の通りです。

AddOutputFilter filter[;filter...] extension [extension ...]

extensionに指定された拡張子を持つファイルに対して、filter で指定されたフィルタを適用します。複数のフィルタを指定するには“;”(セミコロン)で区切ります。

現在、Apache2.2 で提供されている標準的なフィルタと関連モジュールには以下があります。

表 9-11. フィルタ

関連モジュール説明
mod_includeINCLUDES フィルタ。SSI 機能。
mod_sslSSL(Secure Sockets Layer)。(SSLについては項9.22を参照)
mod_deflate DEFLATE フィルタ。データの圧縮・展開機能。
mod_charset_lite文字セットの変換機能
mod_ext_filter外部プログラム用フィルタ

Apache2.2 で SSI を有効にするには、/etc/httpd/conf/httpd.conf に以下のように設定します。

Addtype         text/html  .shtml
AddOutputFilter INCLUDES   .shtml

Turbolinux 11 Server の /etc/httpd/conf/httpd.conf には、標準で上記の設定が記述されていますので、デフォルトで INCLUDES フィルタは機能しています。ただし、SSI を使用可能にするには、CGI の場合と同様にコンテンツを格納するディレクトリの Options ディレクティブに、IncludesNOEXEC を指定し、SSI の実行を許可するようにアクセス制限の設定を行う必要があります。(詳細については、項9.9 を参照)

<Directory /home/*/public_html>
    AllowOverride FileInfo AuthConfig Limit
    Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec ExecCGI
    <Limit GET POST OPTIONS PROPFIND>
        Order allow,deny
        Allow from all
    </Limit>
    <LimitExcept GET POST OPTIONS PROPFIND>
        Order deny,allow
        Deny from all
    </LimitExcept>
<Directory>

この設定により各ユーザーは、~/public_html/ ディレクトリに格納した .shtml という拡張子のファイルを SSI として実行することが可能になります。

なお、フィルタに関連するディレクティブは、AddOutputFilter 以外にも SetInputFilter、SetOutputFilter、AddInputFilter, AddOutputFilter、RemoveInputFilter、RemoveOutputFilter などが存在します。例えば、特定のディレクトリ以下にあるすべてのファイル対して INCLUDES フィルタを適用したいのであれば、SetOutputFilter を使用して以下のように設定することが可能です。

<Directory /var/www/html/data>
    SetOutputFilter INCLUDES
</Directory>

ティップ

SSI を利用するためのもう一つの指定方法として XBitHack ディレクティブがあります。上記の設定に加えて以下を指定することにより、SSI を含む HTML ファイルの拡張子を、.html から .shtml に変更する必要がなくなります。XBitHack On はファイルの所有者が実行権限を持つ html ファイルを SSI として処理します。

 XBitHack on