SSI入門

SSI とは ?

SSI (Server Side Includes) は、HTML ページ内に配置されるコマンドであり、ApacheHTTPサーバに対する命令です。

サーバでページを提供する時に評価されます。SSIは、CGIプログラムやその他の動的な技術で全てのページを提供せずに、動的に生成されたコンテンツを現在のHTML ページに加えます。どういう場合にSSIを使い、どういう場合にプログラムで ページを完全に生成するかは、ページのうちどの程度が静的であり、ページが提供されるたびに再計算する必要がどの程度あるかで通常は決定します。

SSI は現在時刻のような小さい情報を加えるにはうってつけの方法です。 しかし、そのページのほとんどの部分が提供時に生成される場合は、 他の方法を探す必要があります。

SSIによる表示の一例太字がSSI出力です
  • ただいまの日時はTuesday, 02-Dec-2008 23:00:41 JSTです。
  • このページのファイル名はssi.shtmです。
  • このページのURLはhttp://web.okanos.com/employment/ssi.shtmです。
  • このページの最終更新はMonday, 09-Jun-2008 10:10:49 JSTです。
  • 貴方のクライアントエージェントはCCBot/1.0 (+http://www.commoncrawl.org/bot.html)
  • あなたはこのページに(none)から来ました。
  • このページのサイズは 11kです。
当サイトでは、ヘッダー・フッター・サイドメニュー・広告はSSIを利用しています。広告はCGIと組み合わせたランダム表示です。

さくらでのSSIご利用の手引き

基本設定

ファイルの拡張子 .shtml
.htaccess 特に必要なし
 

注意事項・制限事項

  • ウェブサーバの仕様により絶対パスによるプログラムの指定はできません。
  • SSIから呼び出されるプログラムについては、プログラム配布元が公開している仕様ににしたがって設定してください。
  • 設置にかかわる具体的な方法(ファイルの転送、設定項目など)や、デバッグ、プログラムの改変・改造はサポートいたしかねます。 配布元または作成者にご相談ください。

SSIの一例

SSIの使用したほんの一例です。詳しいパラメータや利用法に付いては、ウェブサーバやホームページの専門書籍を参照してください。

書  式  : <!--#str1 str2="str3"-->
記入例 : <!--#FLASTMOD FILE="ssi.shtml"-->

この例の場合、「ssi.shtml」の最終更新日時を表示します。  

str1 str2 str3 備考
ECHO VAR 環境変数 "str3"を表示する
INCLUDE FILE ファイルまでの相対パス "str3" をインクルードする
VIRTUAL ファイルまでのURL絶対パス(*1)
EXEC CGI ファイル名(相対パス) "str3"の結果を表示
CONFIG TIMEFMT 日時表示形式 表示フォーマットをカスタマイズする
SIZEFMT サイズ表示形式
FLASTMOD FILE ファイル名(相対パス) "str3"の最終更新日を表示
VIRTUAL ファイルまでのURL絶対パス(*1)
FSIZE FILE ファイル名(相対パス) "str3"のサイズを表示
VIRTUAL ファイルまでのURL絶対パス(*1)

(*1 URL絶対パス) URLの最初のスラッシュから左側のパスを指します。
例) http://www.sakura.ad.jp/have/a/nice/day.shtml の場合「/have/a/nice/day.shtml」を記入します。

ヘッダーとメニューをインクルードするイメージ

<div id="banner">
<!--#include virtual="/banner.shtm" -->
</div>

<div id="sidebar">
<!--#include file="sidemenu.htm" -->

</div>

SSIイメージ

SSI を許可するためのサーバの設定

サーバでSSIを許可するには、httpd.confファイルまたは.htaccessファイルに次のディレクティブを指定する必要があります:

Options +Includes

この指定は、ファイルを SSI ディレクティブで解析させることを許可するということを Apache に伝えます。

ほとんどの設定ではお互いを上書きできる、複数のOptions があることに 注意してください。

おそらく、設定が最後に評価されることを 保証されるために、SSI を使用したいディレクトリにOptionsディレクティブを適用する必要があるでしょう。

全てのファイルが SSI ディレクティブで解析されるというわけではありません。

どのファイルが解析されるかを Apache に伝える必要があります。

これを行なうには二つ方法があります。 次のディレクティブを使うことで、例えば.shtml のような特別なファイル拡張子を持つファイルを解析するよう Apache に伝えることができます:

AddType text/html .shtml
AddOutputFilter INCLUDES .shtml

この方法の欠点は、もし現在のページに SSI ディレクティブを加えたい場合、それらのディレクティブが実行されるように.shtml拡張子にするため、そのページの名前と、そのページへの全てのリンクを変更しなければならないことです。

もう一つの方法は、XBitHack ディレクティブを使用することです:

XBitHack on

XBitHack は、ファイルの実行ビットが立っている場合、SSI ディレクティブにより解析することを Apache に伝えます。

従って、SSI ディレクティブを現在のページに加えるためには、ファイル名を変更しなくてもよく、単にchmodを使用してファイルを実行可能にするだけで済みます。

chmod +x pagename.html

行なうべきではないことに関する短いコメント。

時々誰かが、全ての.htmlファイルをSSI で解析するよう Apache に伝えれば、わざわざ.shtml というファイル名にする必要がないといって薦めるのを見ることでしょう。

こういう人たちは、おそらくXBitHack について聞いたことがないのでしょう。

この方法について注意することは、たとえ SSI ディレクティブを全く含まない場合でも、Apache がクライアントに 送る全てのファイルを最後まで読み込ませることになります。

この方法はかなり処理を遅くするものであり、良くないアイデアです。

もちろん、Windows ではそのような実行ビットをセット するようなものはありませんのでオプションが少し制限されています。

デフォルトの設定では、Apache は SSI ページについて最終変更時刻や コンテンツの長さを HTTP ヘッダに送りません。

動的なコンテンツであるため、それらの値を計算するのが難しいからです。 このためドキュメントがキャッシュされなくなり、 結果としてクライアントの性能が遅くなったように感じさせることになります。 これを解決する方法が二つあります:

  1. XBitHack Full 設定を使用する。 この設定により、もともと要求されたファイルの時刻を参照し、 読み込まれるファイルの変更時刻を無視して最終変更時刻を決定するよう Apache に伝えます。
  2. mod_expires で提供されているディレクティブを使用して、 ファイルが無効になる時刻を明示します。これにより、 ブラウザとプロキシにキャッシュが有効であることを通知します。

NEXT

戻る


Webサイトを持とう

SEOアクセス向上

雑学

広告