SSIとはServer Side Includeの略で、HTML文書の中に決められた書式のコマンドを記述することできます。
このコマンドはブラウザからリクエストがあった場合に、WEBサーバーに実行されます。
実行結果はそのコマンドが記述されていた部分に埋め込まれ、ブラウザに表示されます。
このコマンドには、別のファイルからHTML文書を読み込むコマンドがあり、WEBサイト内の異なるページで同じフッターやヘッダー
を使用している場合、ヘッダー、フッター部のみ別ファイルとしておき、複数のファイルから読み込ませることが出来ます。
こうすることで、共通的な部品に修正を行おうと思った場合、同じような修正をたくさんのファイルに
せずとも済むというメリットがあります。
AddType text/html .shtml AddOutputFilter INCLUDES .shtml
上記記述で拡張子が.shtmlのファイルでSSIが使用可能になります。
さらにSSIの使用を許可するディレクトリの設定を行う必要があります。
以下の例では /var/www/localhost/htdocs 内のファイルにSSIの実行を許可しています。
<Directory "/var/www/localhost/htdocs"> Options IncludesNoExec </Directory>"Options IncludesNoExec"の部分を"Options Includes"と記述してもSSIは有効になりますが、 Exec系のSSIも有効になってしまいます。Exec系のSSI命令は、システムのコマンドが実行できたりCGIプログラム が実行できたりと、セキュリティ上好ましくありません。フッターやヘッダーの共通化 だけならEXEC系のSSI命令は必要ないので、"Options IncludesNoExec"とするのが良いでしょう。
上記の様に拡張子でSSIを有効にする方法では拡張子をshtmlにする必要があります。 そのため、既にあるファイルに対してSSIを利用するときにファイル名を変える必要があります。 ファイル名を変えると、そのファイルへのリンクも修正する必要があり、面倒です。
SSIでは、拡張子による制御のほかに、ファイルに実行権限を与える事でSSIを有効にするXbithackディレクティブ という設定があります。 以下の例では、/var/www/localhost/htdoc にある実行権限の与えられた ファイルで、SSI(Exec系のSSIを除く)を有効にしています。
<Directory "/var/www/localhost/htdocs"> Xbithack full Options IncludesNoExec </Directory>例えばtest.htmlというファイルでSSIを有効にしたい場合は、 このファイルに実行権限を与えます。
$ chmod +x test.html
"Xbithack full"の部分は"Xbithack on" でもSSIは有効になりますが、Last-modifiedヘッダ が出力されなくなります。
Last-modifiedヘッダにより、サーバーはリクエストのあったファイルの最終更新日を
ブラウザ等のクライアント知らせることができます。
クライアントはこの更新日を確認し、以前アクセスした日時以降に更新が行われているときのみデータを受け取るようにする事で、
通信量を削減する事ができます。
<!--#include file="footer.html" -->ファイル名に../や絶対パスを使用したい場合は"virtual"を使用します。
<!--#include virtual="/hoge/footer.html" -->