]> granicus.if.org Git - apache/blob - docs/manual/mod/mod_include.xml.ja
Rebuild
[apache] / docs / manual / mod / mod_include.xml.ja
1 <?xml version="1.0" encoding="UTF-8" ?>
2 <!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
3 <?xml-stylesheet type="text/xsl" href="../style/manual.ja.xsl"?>
4 <!-- English Revision: 656287:1440766 (outdated) -->
5
6 <!--
7  Licensed to the Apache Software Foundation (ASF) under one or more
8  contributor license agreements.  See the NOTICE file distributed with
9  this work for additional information regarding copyright ownership.
10  The ASF licenses this file to You under the Apache License, Version 2.0
11  (the "License"); you may not use this file except in compliance with
12  the License.  You may obtain a copy of the License at
13
14      http://www.apache.org/licenses/LICENSE-2.0
15
16  Unless required by applicable law or agreed to in writing, software
17  distributed under the License is distributed on an "AS IS" BASIS,
18  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
19  See the License for the specific language governing permissions and
20  limitations under the License.
21 -->
22
23 <modulesynopsis metafile="mod_include.xml.meta">
24
25 <name>mod_include</name>
26 <description>サーバがパースする html ドキュメント (Server Side Includes)</description>
27 <status>Base</status>
28 <sourcefile>mod_include.c</sourcefile>
29 <identifier>include_module</identifier>
30 <compatibility>Apache 2.0 から出力フィルタとして実装されました。</compatibility>
31
32 <summary>
33     <p>このモジュールはファイルがクライアントに送られる前に処理するフィルタを
34     提供します。処理の内容は<dfn>要素</dfn>と呼ばれる特別な形式の SGML コメントにより
35     制御されます。これらの要素は条件分岐や、他のファイルや
36     プログラムの出力の取り込み、環境変数の設定や表示を行なうことが
37     できます。</p>
38 </summary>
39 <seealso><directive module="core">Options</directive></seealso>
40 <seealso><directive module="core">AcceptPathInfo</directive></seealso>
41 <seealso><a href="../filter.html">フィルタ</a></seealso>
42 <seealso><a href="../howto/ssi.html">SSI チュートリアル</a></seealso>
43
44 <section id="enabling">
45     <title>Server-Side Includes を有効にする</title>
46
47     <p>Server Side Includes は <code>INCLUDES</code>
48     <a href="../filter.html">フィルタ</a> により実装されています。
49     Server-side include のディレクティブを含むドキュメントの拡張子が
50     .shtml の場合、以下のディレクティブでは Apache がそれらを
51     パースして、その結果できるドキュメントに <code>text/html</code> の
52     MIME タイプを割り当てます:</p>
53
54     <example>
55       AddType text/html .shtml<br />
56       AddOutputFilter INCLUDES .shtml
57     </example>
58
59     <p>以下のディレクティブは shtml ファイルのあるディレクトリで指定されている
60     必要があります (通常は <directive module="core" 
61     type="section">Directory</directive> セクションで指定しますが、
62     <directive module="core">AllowOverride</directive> <code>Options</code>
63     が設定されていると、<code>.htaccess</code> ファイルに書くこともできます):</p>
64
65     <example>
66       Options +Includes
67     </example>
68
69     <p>互換性を保つために、<code>server-parsed</code>
70     <a href="../handler.html">ハンドラ</a> も INCLUDES フィルタを
71     有効にします。MIME タイプ <code>text/x-server-parsed-html</code> や
72     <code>text/x-server-parsed-html3</code> のドキュメントに対しても
73     Apache は INCLUDES フィルタを有効にします (出力されるものは
74     MIME タイプ <code>text/html</code> になります)。</p>
75
76     <p>詳しい情報は <a
77     href="../howto/ssi.html">Tutorial on Server Side Includes</a>.</p>
78 </section> <!-- /enabling -->
79
80 <section id="pathinfo">
81     <title>サーバサイドインクルード (SSI) での PATH_INFO</title>
82
83     <p>SSI で処理されるファイルはデフォルトでは <code>PATH_INFO</code>
84     (後続のパス名情報)
85     付きのリクエストを受け入れなくなりました。<directive 
86     module="core">AcceptPathInfo</directive> ディレクティブで
87     <code>PATH_INFO</code> 付きのリクエストを受け入れるようにサーバを
88     設定できます。</p>
89 </section> <!-- /pathinfo -->
90
91 <section id="elements"><title>基本要素</title>
92     <p>ドキュメントは、SGML のコメントとして特別なコマンドが埋め込まれた
93     HTML ドキュメントとしてパースされます。コマンドの構文は次のように
94     なっています:</p>
95
96     <example>
97       &lt;!--#<var>element</var> <var>attribute</var>=<var>value</var>
98       <var>attribute</var>=<var>value</var> ... --&gt;
99     </example>
100
101     <p>値 <transnote>value</transnote> は二重引用符で囲むのが一般的ですが、
102     シングルクオート (') とバッククオート (`) も使用できます。
103     多くのコマンドは属性-値 <transnote>attribute-value</transnote> の組を一つだけ指定できます。
104     コメントの終わり (<code>--&gt;</code>)
105     の前には、SSI の句の一部だと解釈されないようにするために空白を
106     入れてください。最初の <code>&lt;!--#</code> はまとめて<em>一つ</em>の
107     句で、空白をふくんではいけないこと注意してください。</p>
108
109     <p>要素 <transnote>element</transnote> を以下の表に示します。</p>
110
111     <table border="1">
112     <tr><th>要素</th><th>説明</th></tr>
113     <tr><td><code><a href="#element.config">config</a></code></td>
114         <td>configure output formats</td></tr>
115     <tr><td><code><a href="#element.echo">echo</a></code></td>
116         <td>print variables</td></tr>
117     <tr><td><code><a href="#element.exec">exec</a></code></td>
118         <td>execute external programs</td></tr>
119     <tr><td><code><a href="#element.fsize">fsize</a></code></td>
120         <td>print size of a file</td></tr>
121     <tr><td><code><a href="#element.flastmod">flastmod</a></code></td>
122         <td>print last modification time of a file</td></tr>
123     <tr><td><code><a href="#element.include">include</a></code></td>
124         <td>include a file</td></tr>
125     <tr><td><code><a href="#element.printenv">printenv</a></code></td>
126         <td>print all available variables</td></tr>
127     <tr><td><code><a href="#element.set">set</a></code></td>
128         <td>set a value of a variable</td></tr>
129     </table>
130
131     <p>SSI 要素は <module>mod_include</module> 以外のモジュールで
132     定義されることもあります。実際、
133     <code><a href="#element.exec">exec</a></code> 要素は
134     <module>mod_cgi</module> で提供されていて、このモジュールが
135     ロードされる場合にのみ利用可能となります。</p>
136
137     <section id="element.config"><title>config 要素</title>
138       <p>次のコマンドは解析の様々な側面を制御します。属性は次の通りです。</p>
139
140       <dl>
141       <dt><code>echomsg</code> (<em>Apache 2.1 以降</em>)</dt>
142       <dd>指定される値は、<code><a href="#element.echo">echo</a></code>
143       要素が未定義の変数をエコーしようとした際に、
144       クライアントに送られるメッセージになります。
145       <directive module="mod_include">SSIUndefinedEcho</directive> 
146       ディレクティブを上書きします。</dd>
147
148       <dt><code>errmsg</code></dt>
149       <dd>この値が、ドキュメントの解析中にエラーが発生した時に
150       クライアントに送信されるメッセージになります。
151       <directive module="mod_include">SSIErrorMsg</directive>
152       ディレクティブを上書きします。</dd>
153
154       <dt><code>sizefmt</code></dt>
155       <dd>この値は、ファイルのサイズを表示する際に使用する
156       フォーマットを設定します。値は バイトカウントの
157       <code>bytes</code>か、Kb や Mb を優先的に使用する
158       <code>abbrec</code> (例えば 1024 バイトは "1K" と表示されます)
159       です。</dd>
160
161       <dt><code>timefmt</code></dt>
162       <dd>この値は <code>strftime(3)</code> ライブラリルーチンが
163       日時をプリントする際に用いられます。</dd>
164       </dl>
165     </section> <!-- /config -->
166
167     <section id="element.echo"><title>echo 要素</title>
168       <p>このコマンドは以下で定義されている <a href="#includevars">include
169       変数</a> を表示します。変数が設定されていない場合は <directive 
170       module="mod_include">SSIUndefinedEcho</directive> ディレクティブで
171       決定される結果となります。日付はその時点での <code>timefmt</code> に従って
172       表示されます。属性は次の通りです。</p>
173
174       <dl>
175       <dt><code>var</code></dt>
176       <dd>値は表示する変数の名前です。</dd>
177
178       <dt><code>encoding</code></dt>
179       <dd><p>変数を出力する前に、変数中の特別文字をどのようにエンコードするかを
180       指定します。<code>none</code> に設定されていると、エンコードは行なわれません。
181       <code>url</code> に設定されていると、URL エンコード (%-エンコードとも
182       呼ばれています。これはリンク等の URL の使用に適切です) が
183       行なわれます。<code>echo</code> 要素の開始時は、デフォルトは
184       <code>entity</code> に設定されています。これはエンティティエンコード
185       (段落やテキストなどのブロックレベルの HTML エレメントのコンテキストに
186       適しています) を行ないます。これは <code>encoding</code> 属性
187       を加えることで変更できます。変更は次の <code>encoding</code> 属性か、
188       要素の終了まで効力を持ちます。</p>
189
190       <p><code>encoding</code> 属性はエンコードの変更をしたい <code>var</code> 
191       の<em>前に</em> ある必要があることに注意してください。
192       また、ISO-8859-1 エンコーディングで
193       定義されている特別な文字だけがエンコードされます。
194       別の文字のエンコーディングの場合は、このエンコーディングは
195       望みの結果にならないかもしれません。</p>
196
197       <note type="warning">
198         クロスサイトスクリプティングの問題を避けるために、
199         <em>常に</em>ユーザからのデータをエンコードすべきです。
200       </note>
201       </dd>
202       </dl>
203     </section> <!-- /echo -->
204
205     <section id="element.exec"><title>exec 要素</title>
206       <p><code>exec</code> コマンドは指定されたシェルコマンドや CGI スクリプトを
207       実行します。<module>mod_cgi</module> がサーバに組み込まれているいなければ
208       なりません。<directive module="core">Option</directive> 
209       <code>IncludesNOEXEC</code> はこのコマンドを無効にします。
210       使用可能な属性は次の通りです。</p>
211
212       <dl>
213       <dt><code>cgi</code></dt>
214       <dd><p>値は (%-エンコードされた) URL を指定します。パスが
215       スラッシュ (/) で始まらないときは、ドキュメントからの
216       相対パスとして扱われます。このパスで参照されているドキュメントは
217       サーバが CGI スクリプトとして扱っていなくても CGI スクリプトとして
218       起動されます。ただし、スクリプトのあるディレクトリでは
219       (<directive module="mod_alias">ScriptAlias</directive>
220       や <directive module="core">Option</directive> <code>ExecCGI</code>
221       によって) CGI スクリプトの使用が許可されている必要があります。</p>
222
223       <p>CGI スクリプトには、クライアントからの元々のリクエストの
224       <code>PATH_INFO</code> とクエリー文字列 (<code>QUERY_STRING</code>) が渡されます。
225       これらは URL パスとして特定<em>できない</em>ものです。
226       スクリプトは標準 <a href="mod_cgi.html">CGI</a> 環境に加えて、include 変数を
227       使用することができます。</p>
228
229       <example><title>例</title>
230         &lt;!--#exec cgi="/cgi-bin/example.cgi" --&gt;
231       </example>
232
233       <p>スクリプトが、出力の代わりに <code>Location:</code> ヘッダを返すと、
234       HTML のアンカー <transnote>リンク</transnote> に変換されます。</p>
235
236       <p><code>exec cgi</code> よりも、
237       <code><a href="#includevirtual">include virtual</a></code>
238       の方を使うようにしてください。特に、CGI への追加の引数を
239       クエリー文字列を使って渡すことは <code>exec cgi</code> は
240       できませんが、<code>include virtual</code> は以下のようにして
241       可能です。</p>
242
243       <example>
244         &lt;!--#include virtual="/cgi-bin/example.cgi?argument=value" --&gt;
245       </example>
246       </dd>
247
248       <dt><code>cmd</code></dt>
249       <dd><p>サーバは指定された文字列を <code>/bin/sh</code> を使って
250       実行します。コマンドは通常の CGI 変数に加えて <a
251       href="#includevars">include 変数</a>も使うことができます。</p>
252
253       <p>ほとんどの場合、<code><a href="#includevirtual">#include 
254       virtual</a></code> を使う方が <code>#exec cgi</code> や <code>#exec
255       cmd</code> を使うよりも良いです。前者 (<code>#include virtual</code>)
256       は標準の Apache のサブリクエスト機構を使ってファイルやスクリプトの
257       出力を取り込みます。
258       こちらの方がよくテストされメンテナンスされた方法です。</p>
259
260       <p>さらに、Win32 のようないくつかのプラットフォームや、<a 
261       href="../suexec.html">suexec</a> を使っている unix では、
262       <code>exec</code> ディレクティブのコマンドに
263       引数を渡したり、コマンドに空白を入れることはできません。
264       ですから、以下のものは unix の suexec でない設定では動作しますが、
265       Win32 や suexec を使っている unix では期待した結果にはなりません:</p>
266
267       <example>
268         &lt;!--#exec cmd="perl /path/to/perlscript arg1 arg2" --&gt;
269       </example>
270       </dd>
271       </dl>
272     </section> <!-- /exec -->
273
274     <section id="element.fsize"><title>fsize 要素</title>
275       <p>このコマンドは指定されたファイルの大きさを <code>sizefmt</code> の
276       書式指定に基づいて出力します。属性は次の通りです。</p>
277
278       <dl>
279       <dt><code>file</code></dt>
280       <dd>値は解析されているドキュメントの存在するディレクトリからの
281       相対パスです。</dd>
282
283       <dt><code>virtual</code></dt>
284       <dd> 値は (% エンコードされた) URL-path です。スラッシュ (/) で
285       始まらないときはドキュメントからの相対パスとして扱われます。
286       CGI の出力のサイズはプリント<em>されません</em>。CGI
287       スクリプト自体のサイズがプリントされることに注意してください。</dd>
288       </dl>
289     </section> <!-- /fsize -->
290
291     <section id="element.flastmod"><title>flastmod 要素</title>
292       <p>このコマンドは指定されたファイルの最終修正時刻を
293       <code>timefmt</code> 書式指定に従って表示します。
294       指定可能な属性は <code>fsize</code> コマンドと同じです。</p>
295     </section> <!-- /flastmod -->
296
297     <section id="element.include"><title>include 要素</title>
298       <p>このコマンドは別の文書やファイルのテキストを解析しているファイルに
299       挿入します。挿入されるファイルはアクセス制御の管理下にあります。
300       解析しているファイルの存在するディレクトリに
301       <a href="core.html#options">Option</a> <code>IncludesNOEXEC</code>
302       が設定されている場合、text <glossary ref="mime-type">MIME タイプ</glossary>
303       (<code>text/plain</code>, <code>text/html</code> 等) 
304       のドキュメントのみインクルードが行なわれます。
305       その他の場合は、クエリー文字列も含め、コマンドで指定された
306       完全な URL を使って普通に CGI スクリプトが呼び出されます。</p>
307
308       <p>属性が文書の位置を指定します。include コマンドに与えられたそれぞれの
309       属性に対して挿入作業が行なわれます。有効な属性は次の通りです。</p>
310
311       <dl>
312       <dt><code>file</code></dt>
313       <dd>値は解析されているドキュメントの存在するディレクトリからの
314       相対パスです。
315       <code>../</code> を含んでいたり、絶対パスを指定したりはできません。
316       ですから、ドキュメントルートの外にあるファイルや、ディレクトリ構造で
317       上位にあるファイルを挿入することはできません。
318       常にこの属性よりは、<code>virtual</code> 属性を使うようにしてください。
319       </dd>
320
321       <dt><code><a id="includevirtual" name="includevirtual"
322       >virtual</a></code></dt>
323       <dd><p>値は解析されているドキュメントからの (% エンコードされた) URL
324       です。URL にはスキームやホスト名を含めることはできません。パスと、
325       もしあればクエリー文字列を指定できるだけです。スラッシュ (/) から
326       始まらない場合は、ドキュメントからの相対パスとして扱われます。</p>
327
328       <p>URL は属性から作られ、その URL をクライアントがアクセスしたときに
329       出力される内容が解析後の出力に含められます。ですから、挿入される
330       ファイルは入れ子構造にすることができます。</p>
331
332       <p>指定された URL が CGI プログラムであった場合は、
333       プログラムが実行され、その出力が解析しているファイル中の
334       ディレクティブがあった位置に挿入されます。CGI の url に
335       クエリー URL を入れることもできます。</p>
336
337       <example>
338         &lt;!--#include virtual="/cgi-bin/example.cgi?argument=value" --&gt;
339       </example>
340
341       <p>HTML ドキュメントに CGI プログラムの出力を含める方法としては、
342       <code>include virtual</code> の方が <code>exec cgi</code> よりも
343       好ましい方法です。</p>
344
345       <p><directive module="mod_request">KeptBodySize</directive>
346       ディレクティブが設定されていて、かつ、この対象ファイルが
347       <transnote>POST リクエストを</transnote>受け入れできるなら、
348       POST リクエストを受け取ってサブリクエストを発行する際にも
349       POST リクエストが渡されます。
350       このディレクティブが設定されていない場合は、
351       サブリクエストは GET リクエストとして処理されます。</p>
352
353       </dd>
354       </dl>
355     </section> <!-- /include -->
356
357     <section id="element.printenv"><title>printenv 要素</title>
358       <p>これは、存在するすべての変数とその値を表示します。Apache 1.3.12 から、
359       特別な文字は出力される前にエンティティエンコード (詳細は <a
360       href="#element.echo"><code>echo</code></a> 要素を参照)
361       されるようになりました。属性はありません。</p>
362
363       <example><title>例</title>
364         &lt;!--#printenv --&gt;
365       </example>
366     </section> <!-- /printenv -->
367
368     <section id="element.set"><title>set 要素</title>
369       <p>これは変数の値を設定します。属性は次の通りです。</p>
370
371       <dl>
372       <dt><code>var</code></dt>
373       <dd>設定する変数の名前。</dd>
374
375       <dt><code>value</code></dt>      
376       <dd>変数に設定する値。</dd>
377       </dl>
378
379       <example><title>例</title>
380         &lt;!--#set var="category" value="help" --&gt;
381       </example>
382     </section> <!-- /set -->
383 </section> <!-- /basic elements -->
384
385 <section id="includevars">
386     <title>Include 変数</title>
387
388     <p>標準 CGI 環境の変数に加えて、<code>echo</code> コマンドや、
389     <code>if</code> や <code>elif</code>, それにドキュメントから呼び出される
390     すべてのプログラムから使用できる変数があります。</p>
391
392     <dl>
393       <dt><code>DATE_GMT</code></dt>
394       <dd>グリニッジ標準時による現在時刻。</dd>
395
396       <dt><code>DATE_LOCAL</code></dt>
397       <dd>ローカルの標準時による現在時刻。</dd>
398
399       <dt><code>DOCUMENT_NAME</code></dt>
400       <dd>ユーザがリクエストした (ディレクトリを除いた) ファイル名。</dd>
401
402       <dt><code>DOCUMENT_URI</code></dt>
403       <dd>ユーザがリクエストした (% エンコードされた) URL-path。
404       挿入ファイルが入れ子になっている場合は、解析されている
405      ドキュメントの URL では<em>ない</em>ことに注意してください。</dd>
406
407       <dt><code>LAST_MODIFIED</code></dt>
408       <dd>ユーザがリクエストしたドキュメントの最終修正時刻。</dd>
409
410       <dt><code>QUERY_STRING_UNESCAPED</code></dt>
411       <dd>クエリー文字列がある場合、この変数には (%-デコードされた)
412       クエリー文字列が代入されていて、shell で使用できるように
413       <em>エスケープ</em>されています (<code>&amp;</code>
414       といった特殊文字にはバックスラッシュが直前に置かれます)。</dd>
415     </dl>
416 </section>
417
418 <section id="substitution"><title>変数置換</title>
419
420     <p>変数置換はたいていの場合 SSI ディレクティブの引数として妥当な場所にある
421     引用符で囲まれた文字列中で行なわれます。これに該当するものには、
422     <code>config</code>,
423     <code>exec</code>, <code>flastmod</code>, <code>fsize</code>,
424     <code>include</code>, <code>echo</code>, <code>set</code> の
425     各ディレクティブと、条件分岐用のオペレータへの引数があります。
426     ドル記号はバックスラッシュを使うことで使うことができます:</p>
427
428     <example>
429       &lt;!--#if expr="$a = \$test" --&gt;
430     </example>
431
432     <p>変数名としてみなされる文字列の中で変数への参照を置換する必要があるときは、
433     シェルでの変数置換のように、中括弧で括ることで区別することができます:</p>
434
435     <example>
436       &lt;!--#set var="Zed" value="${REMOTE_HOST}_${REQUEST_METHOD}" --&gt;
437     </example>
438
439     <p>この例では、<code>REMOTE_HOST</code> が
440     "<code>X</code>" で <code>REQUEST_METHOD</code> が
441     "<code>Y</code>" のときに変数 <code>Zed</code> を "<code>X_Y</code>"
442     に設定します。</p>
443
444     <p>以下の例では、<code>DOCUMENT_URI</code> が <code>/foo/file.html</code>
445     のときに "in foo" を、<code>/bar/file.html</code> のときに "in bar" を、
446     どちらでもないときには "in neither" を表示します。</p>
447
448     <example>
449       &lt;!--#if expr='"$DOCUMENT_URI" = "/foo/file.html"' --&gt;<br />
450       <indent>
451         in foo<br />
452       </indent>
453       &lt;!--#elif expr='"$DOCUMENT_URI" = "/bar/file.html"' --&gt;<br />
454       <indent>
455         in bar<br />
456       </indent>
457       &lt;!--#else --&gt;<br />
458       <indent>
459         in neither<br />
460       </indent>
461       &lt;!--#endif --&gt;
462     </example>
463 </section>
464
465 <section id="flowctrl">
466     <title>フロー制御要素</title>
467
468     <p>基本的なフローコントロール要素は次の通りです。</p>
469
470     <example>
471       &lt;!--#if expr="<var>test_condition</var>" --&gt;<br />
472       &lt;!--#elif expr="<var>test_condition</var>" --&gt;<br />
473       &lt;!--#else --&gt;<br />
474       &lt;!--#endif --&gt;
475     </example>
476
477     <p><code>if</code> 要素はプログラミング言語の
478     if 文と同じように動作します。条件が評価され、結果が真であれば次の
479     <code>elif</code> か <code>else</code> か <code>endif</code>
480     要素までの文字列が出力に挿入されます。</p>
481
482     <p><code>elif</code> や <code>else</code> 文は <var>test_condition</var> 
483     が偽のときにテキストを出力に挿入するために使われます。
484     これらの要素はあってもなくても構いません。</p>
485
486     <p><code>endif</code> 要素は <code>if</code>
487     要素を終了させます。この要素は必須です。</p>
488
489     <p><var>test_condition</var> は以下のどれかです:</p>
490
491     <dl>
492       <dt><code><var>string</var></code></dt>
493       <dd><var>string</var> が空でない場合に真です</dd>
494
495       <dt><code><var>-A string</var></code></dt>
496       <dd><p><transnote>httpd の</transnote>設定を検査して、
497       文字列で指定した URL にアクセスできる場合 true で、
498       そうでなければ false になります。
499       <directive>SSIAccessEnable</directive> が有効のときにのみ
500       この検査は行われます。
501       承認されていないユーザからは隠しておきたい URL についての情報、
502       たとえば URL へのリンクなどがある場合に、便利です。
503       検査では URL へアクセスできるかの権限のみが行われ、URL
504       が存在するかどうかについては検査されないことに注意してください。</p>
505
506       <example><title>Example</title>
507         &lt;!--#if expr="-A /private" --&gt;<br />
508         <indent>
509           Click &lt;a href="/private"&gt;here&lt;/a&gt; to access private
510           information.<br />
511         </indent>
512         &lt;!--#endif --&gt;
513       </example>
514       </dd>
515
516       <dt><code><var>string1</var> = <var>string2</var><br />
517       <var>string1</var> == <var>string2</var><br />
518       <var>string1</var> != <var>string2</var></code></dt>
519
520       <dd><p><var>string1</var> と <var>string2</var> を比較します。
521       <var>string2</var> が <code>/<var>string</var>/</code>
522       という形式であれば、正規表現として比較されます。正規表現は
523       <a href="http://www.pcre.org">PCRE</a> エンジンで実装されていて、
524       <a href="http://www.perl.com">perl 5</a> と同じ構文を使用します。
525       <code>==</code> は単に <code>=</code> の別名で、まったく同じ動作を
526       します。</p>
527
528       <p>正のマッチング (<code>=</code> または <code>==</code>) の場合は、
529       正規表現でグループ分けされたパーツをキャプチャすることができます。
530       キャプチャされた部分は特殊変数 <code>$1</code> .. <code>$9</code>
531       に格納されます。</p>
532
533       <example><title>例</title>
534         &lt;!--#if expr="$QUERY_STRING = /^sid=([a-zA-Z0-9]+)/" --&gt;<br />
535         <indent>
536           &lt;!--#set var="session" value="$1" --&gt;<br />
537         </indent>
538         &lt;!--#endif --&gt;
539       </example>
540       </dd>
541
542       <dt><code><var>string1</var> &lt; <var>string2</var><br />
543        <var>string1</var> &lt;= <var>string2</var><br />
544        <var>string1</var> &gt; <var>string2</var><br />
545        <var>string1</var> &gt;= <var>string2</var></code></dt>
546
547       <dd><var>string1</var> と <var>string2</var> を比較します。
548       <em>文字列として</em>比較される (<code>strcmp(3)</code> を使用)
549       ことに注意してください。ですから、文字列 "100" は "20" 
550       よりも小さいことになります。</dd>
551
552       <dt><code>( <var>test_condition</var> )</code></dt>
553       <dd><var>test_condition</var> が真のとき、真</dd>
554
555       <dt><code>! <var>test_condition</var></code></dt>
556       <dd><var>test_condition</var> が偽のとき、真</dd>
557
558       <dt><code><var>test_condition1</var> &amp;&amp;
559         <var>test_condition2</var></code></dt>
560       <dd><var>test_condition1</var> かつ
561       <var>test_condition2</var> が真のとき、真</dd>
562
563       <dt><code><var>test_condition1</var> ||
564         <var>test_condition2</var></code></dt>
565       <dd><var>test_condition1</var> または
566       <var>test_condition2</var> が真のとき、真</dd>
567     </dl>
568
569     <p>"<em>=</em>" と "<em>!=</em>" の方が "<em>&amp;&amp;</em>" より
570     きつく束縛します。"<em>!</em>" の束縛が一番きつくなっています。
571     ですから以下の二つは等価です:</p>
572
573     <example>
574       &lt;!--#if expr="$a = test1 &amp;&amp; $b = test2" --&gt;<br />
575       &lt;!--#if expr="($a = test1) &amp;&amp; ($b = test2)" --&gt;
576     </example>
577
578     <p>真偽値オペレータ <code>&amp;&amp;</code> と <code>||</code>
579     は同じ優先度です。
580     これらのオペレータで一方により強い優先度をつけたい場合には、
581     括弧を使う必要があります。</p>
582
583     <p>変数やオペレータとして認識されないものはすべて文字列として
584     扱われます。文字列は引用符で囲むこともできます: <code>'string'</code>
585     のように。引用符で囲まれていない文字列には空白 (スペースとタブ)
586     を含めることはできません。それらは変数などの句を分離するために
587     使われているからです。複数の文字列が続いているときは、
588     空白を間に入れて一つにくっつけられます。ですから、</p>
589
590     <example>
591       <p><code><var>string1</var>&nbsp;&nbsp;&nbsp;&nbsp;<var
592       >string2</var></code> は <code><var>string1</var>&nbsp;<var
593       >string2</var></code> になります。<br />
594       <br />
595       また、<br />
596       <br />
597       <code>'<var>string1</var>&nbsp;&nbsp;&nbsp;&nbsp;<var
598       >string2</var>'</code> は <code><var
599       >string1</var>&nbsp;&nbsp;&nbsp;&nbsp;<var>string2</var></code>
600       になります。</p>
601     </example>
602
603     <note><title>真偽値表現の最適化</title>
604       <p>式がもっと複雑になり、処理の速度低下が顕著になった場合は、
605       評価ルールに従って最適化してみると良いでしょう。</p>
606       <ul>
607       <li>評価は左から右に向かって行われます。</li>
608       <li>二値真偽値オペレータ (<code>&amp;&amp;</code> と <code>||</code>)
609           は、出来る限り短絡評価されます。つまり結果として上記のルールは、
610           <module>mod_include</module> が左の評価式を評価します。
611           左側で結果を十分決定できる場合は、評価はそこで停止します。
612           そうでない場合は右側を評価して、左と右の両方から結果を計算します。</li>
613       <li>短絡評価は評価の対象に正規表現が含まれる場合、オフになります。
614           後方参照する変数 (<code>$1</code> .. <code>$9</code>) 
615           を埋めるために、実際に評価する必要があるからです。</li>
616       </ul>
617       <p>特定の式がどのように扱われるかを知りたい場合は、
618       <code>-DDEBUG_INCLUDE</code> コンパイラオプションを付けて
619       <module>mod_include</module> をリコンパイルすると良いでしょう。
620       これにより、全てのパースされた式に対して、字句解析情報、
621       パースツリーと、
622       それがどのようにクライアントに送られた出力まで評価されたかを
623       挿入します。</p>
624     </note>
625  
626     <note><title>正規表現内での / のエスケープ</title>
627     <p>正規表現内でデリミタとして扱いたくない / があれば、それらは全て
628     エスケープしなければなりません。
629     正規表現の意味がどうであろうとエスケープは必要です。</p>
630     </note>
631 </section>
632
633 <directivesynopsis>
634 <name>SSIEndTag</name>
635 <description>include 要素を終了させる文字列</description>
636 <syntax>SSIEndTag <var>tag</var></syntax>
637 <default>SSIEndTag &quot;--&gt;&quot;</default>
638 <contextlist><context>server config</context><context>virtual host</context>
639 </contextlist>
640 <compatibility>2.0.30 以降で利用可能</compatibility>
641
642 <usage>
643     <p>このディレクティブは <module>mod_include</module> が探す、
644     include 要素の終了を示す文字列を変更します。</p>
645
646     <example><title>例</title>
647       SSIEndTag "%&gt;"
648     </example>
649
650 </usage>
651 <seealso><directive module="mod_include">SSIStartTag</directive></seealso>
652 </directivesynopsis>
653
654 <directivesynopsis>
655 <name>SSIUndefinedEcho</name>
656 <description>未定義の変数が echo されたときに表示される文字列</description>
657 <syntax>SSIUndefinedEcho <var>string</var></syntax>
658 <default>SSIUndefinedEcho &quot;(none)&quot;</default>
659 <contextlist><context>server config</context><context>virtual host</context>
660 <context>directory</context><context>.htaccess</context></contextlist>
661 <override>All</override>
662 <compatibility>2.0.34 以降で利用可能</compatibility>
663
664 <usage>
665     <p>このディレクティブは変数が定義されていないにも関わらず
666     &quot;echo&quot; されたときに <module>mod_include</module>
667     が表示する文字列を変更します。</p>
668
669     <example><title>例</title>
670       SSIUndefinedEcho "&lt;!-- undef --&gt;"
671     </example>
672 </usage>
673 </directivesynopsis>
674
675 <directivesynopsis>
676 <name>SSIErrorMsg</name>
677 <description>SSI のエラーがあったときに表示されるエラーメッセージ</description>
678 <syntax>SSIErrorMsg <var>message</var></syntax>
679 <default>SSIErrorMsg &quot;[an error occurred while processing this
680 directive]&quot;</default>
681 <contextlist><context>server config</context><context>virtual host</context>
682 <context>directory</context><context>.htaccess</context></contextlist>
683 <override>All</override>
684 <compatibility>バージョン 2.0.30 以降で使用可能</compatibility>
685
686 <usage>
687     <p><directive>SSIErrorMsg</directive> ディレクティブは <module>mod_include</module>
688     がエラーが起こったときに表示するメッセージを変更します。プロダクションサーバでは
689     メッセージがユーザに表示されないようにするために
690     デフォルトエラーメッセージを <code>&quot;&lt;!-- Error --&gt;&quot;</code>
691     に変えるというようなことを考えるかもしれません。</p>
692
693     <p>このディレクティブは <code>&lt;!--#config
694     errmsg=<var>message</var> --&gt;</code> 要素と同じ効果になります。</p>
695
696     <example><title>例</title>
697       SSIErrorMsg "&lt;!-- Error --&gt;"
698     </example>
699 </usage>
700 </directivesynopsis>
701
702 <directivesynopsis>
703 <name>SSIStartTag</name>
704 <description>include 要素を開始する文字列</description>
705 <syntax>SSIStartTag <var>tag</var></syntax>
706 <default>SSIStartTag &quot;&lt;!--#&quot;</default>
707 <contextlist><context>server config</context><context>virtual host</context>
708 </contextlist>
709 <compatibility>バージョン 2.0.30 以降で使用可能</compatibility>
710
711 <usage>
712
713     <p>このディレクティブは <module>mod_include</module> が探す、include
714     要素の開始を示す文字列を変更します。</p>
715
716     <p>二つのサーバで (もしかすると別々の段階で) ファイルの出力を解析していて、
717     それぞれに違うコマンドを処理させたい、
718     というようなときにこのオプションを使います。</p>
719
720     <example><title>例</title>
721       SSIStartTag "&lt;%"<br />
722       SSIEndTag   "%&gt;"
723     </example>
724
725     <p>上の例のように対応する
726     <directive module="mod_include">SSIEndTag</directive> を併せて使うと、
727     下に示す例のように SSI ディレクティブを使えます:</p>
728
729     <example><title>違う開始と終了のタグを使った SSI ディレクティブ</title>
730       &lt;%printenv %&gt;
731     </example>
732 </usage>
733 <seealso><directive module="mod_include">SSIEndTag</directive></seealso>
734 </directivesynopsis>
735
736 <directivesynopsis>
737 <name>SSITimeFormat</name>
738 <description>日付けを現す文字列の書式を設定する</description>
739 <syntax>SSITimeFormat <var>formatstring</var></syntax>
740 <default>SSITimeFormat &quot;%A, %d-%b-%Y %H:%M:%S %Z&quot;</default>
741 <contextlist>
742 <context>server config</context><context>virtual host</context>
743 <context>directory</context><context>.htaccess</context></contextlist>
744 <override>All</override>
745 <compatibility>2.0.30 以降で使用可能</compatibility>
746
747 <usage>
748 <p>このディレクティブは <code>DATE</code> 環境変数を echo して日付を現す文字列が
749     表示されるときの書式を変更します。<var>formatstring</var> は
750     C 標準ライブラリの <code>strftime(3)</code> と同じ形式です。</p>
751
752     <p>このディレクティブは <code>&lt;!--#config
753     timefmt=<var>formatstring</var> --&gt;</code> 要素と同じ効果になります。</p>
754
755     <example><title>例</title>
756       SSITimeFormat "%R, %B %d, %Y"
757     </example>
758
759     <p>上のディレクティブでは、日付は "22:26, June 14, 2002" という
760     形式で表示されます。</p>
761 </usage>
762 </directivesynopsis>
763
764 <directivesynopsis>
765 <name>SSIAccessEnable</name>
766 <description>条件分岐フローの制御で -A フラグが使えるようにする</description>
767 <syntax>SSIAccessEnable on|off</syntax>
768 <default>SSIAccessEnable off</default>
769 <contextlist><context>directory</context><context>.htaccess</context></contextlist>
770
771 <usage>
772     <p><directive>SSIAccessEnable</directive> ディレクティブを使って、
773     条件分岐フローの制御で -A 検査が使えるようにします。
774     <directive>SSIAccessEnable</directive> は次の値を引数にとります:</p>
775
776     <dl>
777
778       <dt><code>off</code></dt>
779       <dd>&lt;!--#if expr="-A /foo"--&gt; では文字列や正規表現として
780       解釈され、-A は特別な意味は持ちません。</dd>
781
782       <dt><code>on</code></dt>
783       <dd>&lt;!--#if expr="-A /foo"--&gt; では、設定上 URL /foo
784       にアクセスできない場合 false で、アクセスできる場合は true</dd>
785
786     </dl>
787
788 </usage>
789 </directivesynopsis>
790
791 <directivesynopsis>
792 <name>XBitHack</name>
793 <description>実行ビットが設定されたファイルの SSI ディレクティブを
794 解析する</description>
795 <syntax>XBitHack on|off|full</syntax>
796 <default>XBitHack off</default>
797 <contextlist><context>server config</context><context>virtual host</context>
798 <context>directory</context><context>.htaccess</context></contextlist>
799 <override>Options</override>
800
801 <usage>
802     <p><directive>XBitHack</directive> ディレクティブは通常の HTML
803     ドキュメントの解析を制御します。このディレクティブは <glossary ref="mime-type">MIME タイプ</glossary>
804     <code>text/html</code> と関連付けられているファイルにのみ影響します。
805     <directive>XBitHack</directive> は以下の値をとることができます。</p>
806
807     <dl>
808       <dt><code>off</code></dt>
809       <dd>実行可能ファイルに対して特別な扱いをしません。</dd>
810
811       <dt><code>on</code></dt>
812       <dd>ユーザの実行ビットが設定されている <code>text/html</code>
813       ファイルは全てサーバで解析する html ドキュメントとして扱われます。</dd>
814
815       <dt><code>full</code></dt>
816       <dd><code>on</code> と同様ですが、グループ実行ビットもテストします。
817       もしそれが設定されていれば、返されるファイルの <code>Last-modified</code> の
818       日付をファイルの最終修正時刻にします。それが設定されていないときは、
819       last-modified の日付は送られません。このビットを設定すると、
820       クライアントやプロキシがリクエストをキャッシュできるようになります。
821
822       <note><strong>注意</strong> 他の CGI を <code>#include</code>
823       するかもしれないものや、各アクセスに対して違う出力を生成する
824       (もしくは後のリクエストで変わるかもしれないもの)
825       すべての SSI スクリプトに対してグループ実行ビットが
826       設定されていないことを確認できない場合は、full は使わない方が良い
827       でしょう。</note>
828       </dd>
829     </dl>
830
831     </usage>
832 </directivesynopsis>
833
834 </modulesynopsis>
835