Server Side Include ( SSI ) は、 World Wide Web専用に使用されている、シンプルなインタープリタ型のサーバー側スクリプト言語です。SSI は、ディレクティブを使用して、1 つまたは複数のファイルの内容をWeb サーバー上の Web ページ(下記参照)に取り込む場合に最も役立ちます。これは通常、ページ ヘッダー、ページ フッター、ナビゲーション メニューなど、サイト全体で共通するコードの一部です。SSI には、条件付き機能の制御ディレクティブや外部プログラムを呼び出すディレクティブも含まれています。Apache 、LiteSpeed、nginx、IIS、W3Cの Jigsaw でサポートされています。[ 1 ] SSIのルーツはNCSA HTTPdにあります。[ 2 ]#include
ウェブサーバーがSSI対応HTMLファイルを認識し、これらの命令を実行するためには、ファイル名が特別な拡張子(デフォルトでは.shtml、、 )で終わるか.stm、.shtmサーバーがこれを許可するように設定されている場合は、ファイルの実行ビットを設定する必要があります。[ 3 ]
SSIはシンプルなプログラミング言語であるため、テキスト型のみをサポートします。制御フローは比較的単純で、選択式もサポートされていますが、ループはネイティブにはサポートされておらず、includeまたはHTTPリダイレクトを使用した再帰処理によってのみ実行できます。[ a ]この言語のシンプルな設計により、多くのサーバーサイドスクリプト言語よりも学習と使用が容易です。一方、複雑なサーバーサイド処理は、より機能豊富なプログラミング言語で行われることがよくあります。SSIはチューリング完全です。[ 4 ]
SSIの構文はシンプルです<!--#directive parameter=value parameter=value -->。ディレクティブはHTMLコメント内に記述されるため、SSIが有効になっていない場合、ユーザーはソースコードを確認しない限り、ページ上のSSIディレクティブを見ることができません。構文では、先頭の「<!--」とディレクティブの間にスペースを入れることができないことに注意してください。ApacheのSSIチュートリアルでは、要素を閉じる「-->」の前にスペース文字を入れることが必須と規定されています。[ 5 ]
日々の引用文を含む Web ページでは、次のコードを Web ページのファイルに配置することで引用文を含めることができます。
<!--#include 仮想="../quote.txt" -->ファイルを一度変更するだけでquote.txt、そのファイルを含むすべてのページに最新の日次引用が表示されます。含まれるのはファイルだけでなく、プログラムからのテキスト出力や、現在時刻などのシステム変数の値も含まれます。
以下はNCSA HTTPd(1990年代)の時代のSSIディレクティブです。 [ 2 ]一部の実装ではこれらすべてをサポートしていません。[ 6 ]
| 指令 | パラメータ | 説明 | 例 |
|---|---|---|---|
include | ファイルまたは仮想 | これはおそらく最もよく使われるSSIディレクティブでしょう。ある文書の内容を別の文書にトランスクルードすることができます。インクルードされる文書自体も、SSI対応のファイルです。fileまたはvirtualパラメータは、インクルードするファイル(HTMLページ、テキストファイル、スクリプトなど)を指定します。NCSA HTTPdは、[ 2 ]経由のCGIをサポートしていませんでしたが、後にApache HTTPdがサポートするようになりました。[ 7 ] プロセスがファイルの読み取りまたはスクリプトの実行権限を持っていない場合、インクルードは失敗します。パラメータ「」は、ディレクトリパスをURLの一部であるかのように扱いますが、「」は、ディレクトリパスを基盤となるファイルシステム内のパスであるかのように扱います。「」を使用する場合、絶対パスの参照や親ディレクトリへのアクセスは禁止されています。Apacheのドキュメントでは、「」よりも「」を使用することを推奨しています。[ 7 ]includevirtualfilefile../virtualfile | <!--#include virtual="menu.cgi" --> <!--#include ファイル="footer.html" --> |
exec | cgi または cmd | このディレクティブは、サーバー上でプログラム、スクリプト、またはシェルコマンドを実行します。cmdパラメータはサーバー側コマンドを指定し、cgiパラメータはCGIスクリプトへのパスを指定します。現在のSSIスクリプトのandPATH_INFOはQUERY_STRINGCGIスクリプトに渡されるため、「include virtual」ではなく「exec cgi」を使用する必要があります。 | <!--#exec cgi="/cgi-bin/foo.cgi" --> <!--#exec cmd="ls -l" --> |
echo | var | このディレクティブは、指定されたHTTP環境変数の内容を表示します。 変数にはHTTP_USER_AGENT、、、LAST_MODIFIEDなどがありますHTTP_ACCEPT。 | あなたのIPアドレスは: <!--#echo var="REMOTE_ADDR" --> |
config | timefmt、sizefmt、またはerrmsg | このディレクティブは、日付、時刻、ファイル サイズ、およびエラー メッセージ (SSI コマンドが失敗したときに返される) の表示形式を設定します。 | <!--#config timefmt="%y %m %d" --> <!--#config sizefmt="バイト" --> <!--#config errmsg="SSI コマンドが失敗しました!" --> |
flastmodそしてfsize | ファイルまたは仮想 | これらのディレクティブは、指定されたドキュメントの最終更新日、または指定されたドキュメントのサイズを表示します。file パラメータまたは virtual パラメータは、使用するドキュメントを指定します。file パラメータはドキュメントパスを基準としたドキュメントの相対パスを定義し、virtual パラメータはドキュメントルートを基準としたドキュメントの相対パスを定義します。 | <!--#flastmod 仮想="index.html" --> <!--#fsize ファイル="script.pl" --> |
制御ディレクティブはSSIに後から追加されました。これには、よく使われるif-elif-else-endifフロー制御や変数の記述に加え、一部の実装でのみ見られるループなどの特殊な機能も含まれます。
| 指令 | パラメータ | 説明 | 例 | 見つかった場所 |
|---|---|---|---|---|
| 式 | if文。1 つの物理ページから複数の論理ページを決定および生成する可能性のある条件テストに使用されます。elifネストされた else-if の省略形でありelse、endifパラメータは受け入れません。 式の構文は実装によって異なります。変数の存在と等価性/正規表現のチェックは一般的にサポートされています。Jigsawでは、代わりに複数の属性に分割された式を使用します。[ 1 ] | <!--#if expr="${Sec_Nav}" --> <!--#include virtual="secondary_nav.txt" --> <!--#elif expr="${Pri_Nav}" --> <!--#include virtual="primary_nav.txt" --> <!--#else --> <!--#include virtual="article.txt" --> <!--#endif --> | どこにでもある。 |
| セット | 変数、値 | SSI変数の値を設定します。Apacheはエンコーディング用の追加パラメータを提供しています。[ 8 ] | <!--#set var="foo" value="bar" --> | アパッチ[ 8 ] 、 Nginx [ 9 ] |
printenv | このディレクティブは、環境変数とユーザー定義変数を含むすべてのSSI変数とその値のリストを出力します。属性はありません。 | <!--#printenv --> | アパッチ[ 8 ] |