ぱそくま ろご
Linux > Apache HTTP > SSI

SSI

SSIとは

SSI(Server Side Includes)はHTMLファイルにある特殊なコメントを書くことにより、サーバー側でそれが実行され、その結果がHTML文章に埋めこめられます。

SSIの例
実行例説明
<!--#echo var="DATE_LOCAL" --> ローカル日付を表示します。
<!--#flastmod file="index.html" --> index.htmlの最終更新日付を表示します。表示フォーマットはtimefmtの設定で行います。(<!--#config timefmt="~" -->)
<!--#include file="header.html" --> header.htmlの中身を埋め込んで表示します。
SSIの要素
要素説明
config 出力フォーマットを設定します。
echo include変数等を出力します。
exec シェルコマンドや CGI スクリプトを 実行します。要mod_cgi。
fsize ファイルサイズを表示します。
flastmod ファイルの最終更新日を表示します。
include 指定したファイルを埋め込みます。 <!--#include file="xxxx.html" -->と指定するとサーバー内の相対パス、 <!--#include virtual="xxxx.html" -->と指定すると、URLからのパスになります。
printenv
set 変数の設定を行います。<!--#set var="category" value="help" -->


SSIを設定し、使えるようにする。

必要なモジュール

SSIを処理するにはmod_includeモジュールが必要です。SSIを実際に実行するmod_cgi等も使用します。

  • #SSIファイルの関連付けに必要(AddTypeやAddOutputFilter)
  • LoadModule include_module modules/mod_mime.so
  • #SSIの実行に必要(XBitHackもこれに含まれる)
  • LoadModule include_module modules/mod_include.so

設定例

SSIを使用するには

  • SSIとして取り扱うファイルを指定する。
  • SSIを使うことApacheに教えるため、Optionsディレクティブを指定する。

の2つの設定が必要です。設定例は以下の通りです。

  • #.shtmlファイルはtext/html形式と設定。
  • AddType text/html .shtml
  • #.shtmlをSSI処理対象に設定。
  • AddOutputFilter INCLUDES .shtml
  • #EXEC命令を無効にしたSSIに設定。
  • Options IncludesNOEXEC

上記以外にもファイルに実行ビット(chmod x+u)でSSIとして処理するかを設定する方法もあります。

  • #実行ビットがたっているものはSSI処理する。グループユーザの実行ビットも有効にする場合はon->fullにしてください。
  • XBitHack on

トラブルシューティング

「an error occurred while processing this directive」と表示されてしまう

「an error occurred while processing this directive」はSSIの実行の際にエラーになった場合表示されます。なお、以下のような場合に表示されます。

  • ファイルの設置場所が違う。
  • パーミッションが違ったり、許可されていなかったりする。
  • ..等々。

これを解決するには

  • ファイルのパスを直接URLに指定し、実際にアクセスできるかを調査(ファイルの設置場所が違う。)
  • 例えば「<!--#include virtual="header.inc" -->」と指定しているが、RewriteRuleで*.incをアクセス不可にしている。

など、色々とためしてみてください。ちなみに、SSIの実行が許可されていない場合、そもそも「an error occurred while processing this directive」とは出ません。(単なるHTMLのコメントアウト扱いになるため。)