Apache モジュール mod_include
```
以下のディレクティブは shtml ファイルのあるディレクトリで指定されている 必要があります (通常は
ハンドラ も INCLUDES フィルタを 有効にします。MIME タイプ text/x-server-parsed-html
のドキュメントに対しても Apache は INCLUDES フィルタを有効にします (出力されるものは MIME タイプ text/html
詳しい情報は Tutorial on Server Side Includes.
element attribute=value attribute=value ... -->
値 (訳注: value) は二重引用符で囲むのが一般的ですが、 シングルクオート (') とバッククオート () も使用できます。 多くのコマンドは属性-値 (訳注: attribute-value) の組を一つだけ指定できます。 コメントの終わり (-->`
) の前には、SSI の句の一部だと解釈されないようにするために空白を 入れてください。最初の
要素 (訳注: element) を以下の表に示します。
| 要素 | 説明 | |---|---| | configure output formats | | print variables | | execute external programs | | print size of a file | | print last modification time of a file | | include a file | | print all available variables | | set a value of a variable |
以外のモジュールで 定義されることもあります。実際、 mod_include
で提供されていて、このモジュールが ロードされる場合にのみ利用可能となります。mod_cgi
か、Kb や Mb を優先的に使用する abbrec
(例えば 1024 バイトは "1K" と表示されます) です。timefmt
ライブラリルーチンが 日時をプリントする際に用いられます。このコマンドは以下で定義されている include 変数 を表示します。変数が設定されていない場合は
ディレクティブで 決定される結果となります。日付はその時点での SSIUndefinedEchotimefmt
変数を出力する前に、変数中の特別文字をどのようにエンコードするかを 指定します。none
に設定されていると、URL エンコード (%-エンコードとも 呼ばれています。これはリンク等の URL の使用に適切です) が 行なわれます。echo
に設定されています。これはエンティティエンコード (段落やテキストなどのブロックレベルの HTML エレメントのコンテキストに 適しています) を行ないます。これは encoding
属性 を加えることで変更できます。変更は次の encoding
の前に ある必要があることに注意してください。 また、ISO-8859-1 エンコーディングで 定義されている特別な文字だけがエンコードされます。 別の文字のエンコーディングの場合は、このエンコーディングは 望みの結果にならないかもしれません。
コマンドは指定されたシェルコマンドや CGI スクリプトを 実行します。
CGI スクリプトには、クライアントからの元々のリクエストの PATH_INFO
) が渡されます。 これらは URL パスとして特定できないものです。 スクリプトは標準 CGI 環境に加えて、include 変数を 使用することができます。
ヘッダを返すと、 HTML のアンカー (訳注: リンク) に変換されます。
の方を使うようにしてください。特に、CGI への追加の引数を クエリー文字列を使って渡すことは include virtualexec cgi
は できませんが、include virtual
を使って 実行します。コマンドは通常の CGI 変数に加えて include 変数も使うことができます。
を使うよりも良いです。前者 (#include virtual
) は標準の Apache のサブリクエスト機構を使ってファイルやスクリプトの 出力を取り込みます。 こちらの方がよくテストされメンテナンスされた方法です。
さらに、Win32 のようないくつかのプラットフォームや、suexec を使っている unix では、 exec
ディレクティブのコマンドに 引数を渡したり、コマンドに空白を入れることはできません。 ですから、以下のものは unix の suexec でない設定では動作しますが、 Win32 や suexec を使っている unix では期待した結果にはなりません:
このコマンドは別の文書やファイルのテキストを解析しているファイルに 挿入します。挿入されるファイルはアクセス制御の管理下にあります。 解析しているファイルの存在するディレクトリに Option IncludesNOEXEC
が設定されている場合、text MIME タイプ (text/plain
等) のドキュメントのみインクルードが行なわれます。 その他の場合は、クエリー文字列も含め、コマンドで指定された 完全な URL を使って普通に CGI スクリプトが呼び出されます。
属性が文書の位置を指定します。include コマンドに与えられたそれぞれの 属性に対して挿入作業が行なわれます。有効な属性は次の通りです。
を含んでいたり、絶対パスを指定したりはできません。 ですから、ドキュメントルートの外にあるファイルや、ディレクトリ構造で 上位にあるファイルを挿入することはできません。 常にこの属性よりは、virtual
値は解析されているドキュメントからの (% エンコードされた) URL です。URL にはスキームやホスト名を含めることはできません。パスと、 もしあればクエリー文字列を指定できるだけです。スラッシュ (/) から 始まらない場合は、ドキュメントからの相対パスとして扱われます。
URL は属性から作られ、その URL をクライアントがアクセスしたときに 出力される内容が解析後の出力に含められます。ですから、挿入される ファイルは入れ子構造にすることができます。
指定された URL が CGI プログラムであった場合は、 プログラムが実行され、その出力が解析しているファイル中の ディレクティブがあった位置に挿入されます。CGI の url に クエリー URL を入れることもできます。
HTML ドキュメントに CGI プログラムの出力を含める方法としては、 include virtual
これは、存在するすべての変数とその値を表示します。Apache 1.3.12 から、 特別な文字は出力される前にエンティティエンコード (詳細は echo 要素を参照) されるようになりました。属性はありません。
標準 CGI 環境の変数に加えて、echo
といった特殊文字にはバックスラッシュが直前に置かれます)。変数置換はたいていの場合 SSI ディレクティブの引数として妥当な場所にある 引用符で囲まれた文字列中で行なわれます。これに該当するものには、 config
の 各ディレクティブと、条件分岐用のオペレータへの引数があります。 ドル記号はバックスラッシュを使うことで使うことができます:
のときに "in foo" を、/bar/file.html
のときに "in bar" を、 どちらでもないときには "in neither" を表示します。
要素はプログラミング言語の if 文と同じように動作します。条件が評価され、結果が真であれば次の elif
文は test_condition が偽のときにテキストを出力に挿入するために使われます。 これらの要素はあってもなくても構いません。
(訳注: httpd の)設定を検査して、 文字列で指定した URL にアクセスできる場合 true で、 そうでなければ false になります。 SSIAccessEnable
Click here to access private information.
string1 と string2 を比較します。 string2 が /
という形式であれば、正規表現として比較されます。正規表現は string/PCRE エンジンで実装されていて、 perl 5 と同じ構文を使用します。 ==
) の場合は、 正規表現でグループ分けされたパーツをキャプチャすることができます。 キャプチャされた部分は特殊変数 $1
を使用) ことに注意してください。ですから、文字列 "100" は "20" よりも小さいことになります。( test_condition )
"=" と "!=" の方が "&&" より きつく束縛します。"!" の束縛が一番きつくなっています。 ですから以下の二つは等価です:
変数やオペレータとして認識されないものはすべて文字列として 扱われます。文字列は引用符で囲むこともできます: 'string'
のように。引用符で囲まれていない文字列には空白 (スペースとタブ) を含めることはできません。それらは変数などの句を分離するために 使われているからです。複数の文字列が続いているときは、 空白を間に入れて一つにくっつけられます。ですから、
) は、出来る限り短絡評価されます。つまり結果として上記のルールは、 mod_include
が左の評価式を評価します。 左側で結果を十分決定できる場合は、評価はそこで停止します。 そうでない場合は右側を評価して、左と右の両方から結果を計算します。$1
) を埋めるために、実際に評価する必要があるからです。特定の式がどのように扱われるかを知りたい場合は、 -DDEBUG_INCLUDE
をリコンパイルすると良いでしょう。 これにより、全てのパースされた式に対して、字句解析情報、 パースツリーと、 それがどのようにクライアントに送られた出力まで評価されたかを 挿入します。mod_include
正規表現内でデリミタとして扱いたくない / があれば、それらは全て エスケープしなければなりません。 正規表現の意味がどうであろうとエスケープは必要です。
SSIErrorMsg "[an error occurred while processing this directive]"
headers are generated by the server.SSILastModified on|off
二つのサーバで (もしかすると別々の段階で) ファイルの出力を解析していて、 それぞれに違うコマンドを処理させたい、 というようなときにこのオプションを使います。
を併せて使うと、 下に示す例のように SSI ディレクティブを使えます:SSIEndTag
SSITimeFormat "%A, %d-%b-%Y %H:%M:%S %Z"
上のディレクティブでは、日付は "22:26, June 14, 2002" という 形式で表示されます。
ファイルは全てサーバで解析する html ドキュメントとして扱われます。full
と同様ですが、グループ実行ビットもテストします。 もしそれが設定されていれば、返されるファイルの Last-modified
の 日付をファイルの最終修正時刻にします。それが設定されていないときは、 last-modified の日付は送られません。このビットを設定すると、 クライアントやプロキシがリクエストをキャッシュできるようになります。 #include
するかもしれないものや、各アクセスに対して違う出力を生成する (もしくは後のリクエストで変わるかもしれないもの) すべての SSI スクリプトに対してグループ実行ビットが 設定されていないことを確認できない場合は、full は使わない方が良い でしょう。
モジュール | ディレクティブ | FAQ | 用語 | サイトマップ
Apache HTTP サーバ バージョン 2.4
Apache モジュール mod_include
このモジュールはファイルがクライアントに送られる前に処理するフィルタを 提供します。処理の内容は要素と呼ばれる特別な形式の SGML コメントにより 制御されます。これらの要素は条件分岐や、他のファイルや プログラムの出力の取り込み、環境変数の設定や表示を行なうことが できます。
Server-Side Includes を有効にする
Server Side Includes は INCLUDES フィルタ により実装されています。 Server-side include のディレクティブを含むドキュメントの拡張子が .shtml の場合、以下のディレクティブでは Apache がそれらを パースして、その結果できるドキュメントに text/html の MIME タイプを割り当てます:
サーバサイドインクルード (SSI) での PATH_INFO
SSI で処理されるファイルはデフォルトでは PATH_INFO (後続のパス名情報) 付きのリクエストを受け入れなくなりました。AcceptPathInfo ディレクティブで PATH_INFO 付きのリクエストを受け入れるようにサーバを 設定できます。
基本要素
ドキュメントは、SGML のコメントとして特別なコマンドが埋め込まれた HTML ドキュメントとしてパースされます。コマンドの構文は次のように なっています:
フロー制御要素
基本的なフローコントロール要素は次の通りです。
SSIEndTag ディレクティブ
このディレクティブは mod_include が探す、 include 要素の終了を示す文字列を変更します。
SSIErrorMsg ディレクティブ
SSIErrorMsg ディレクティブは mod_include がエラーが起こったときに表示するメッセージを変更します。プロダクションサーバでは メッセージがユーザに表示されないようにするために デフォルトエラーメッセージを "" に変えるというようなことを考えるかもしれません。
SSIETag ディレクティブ
このディレクティブの解説文書は まだ翻訳されていません。英語版をご覧ください。
SSILastModified ディレクティブ
このディレクティブの解説文書は まだ翻訳されていません。英語版をご覧ください。
SSILegacyExprParser ディレクティブ
このディレクティブの解説文書は まだ翻訳されていません。英語版をご覧ください。
SSIStartTag ディレクティブ
このディレクティブは mod_include が探す、include 要素の開始を示す文字列を変更します。
SSITimeFormat ディレクティブ
このディレクティブは DATE 環境変数を echo して日付を現す文字列が 表示されるときの書式を変更します。formatstring は C 標準ライブラリの strftime(3) と同じ形式です。
SSIUndefinedEcho ディレクティブ
このディレクティブは変数が定義されていないにも関わらず "echo" されたときに mod_include が表示する文字列を変更します。
XBitHack ディレクティブ
XBitHack ディレクティブは通常の HTML ドキュメントの解析を制御します。このディレクティブは MIME タイプ text/html と関連付けられているファイルにのみ影響します。 XBitHack は以下の値をとることができます。