distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. <
description>サーバがパースする html ドキュメント (Server Side Includes)</
description>
<
identifier>include_module</
identifier>
<
compatibility>Apache 2.0 から出力フィルタとして実装されました。</
compatibility>
<
p>このモジュールはファイルがクライアントに送られる前に処理するフィルタを
提供します。処理の内容は<
dfn>要素</
dfn>と呼ばれる特別な形式の SGML コメントにより
制御されます。これらの要素は条件分岐や、他のファイルや
プログラムの出力の取り込み、環境変数の設定や表示を行なうことが
<
seealso><
directive module="core">Options</
directive></
seealso>
<
seealso><
directive module="core">AcceptPathInfo</
directive></
seealso>
<
title>Server-Side Includes を有効にする</
title>
<
p>Server Side Includes は <
code>INCLUDES</
code>
Server-side include のディレクティブを含むドキュメントの拡張子が
.shtml の場合、以下のディレクティブでは Apache がそれらを
パースして、その結果できるドキュメントに <
code>
text/
html</
code> の
AddOutputFilter INCLUDES .shtml
<
p>以下のディレクティブは shtml ファイルのあるディレクトリで指定されている
必要があります (通常は <
directive module="core" type="section">Directory</
directive> セクションで指定しますが、
<
directive module="core">AllowOverride</
directive> <
code>Options</
code>
が設定されていると、<
code>.htaccess</
code> ファイルに書くこともできます):</
p>
<
p>互換性を保つために、<
code>server-parsed</
code>
Apache は INCLUDES フィルタを有効にします (出力されるものは
MIME タイプ <
code>
text/
html</
code> になります)。</
p>
</
section>
<!-- /enabling --> <
title>サーバサイドインクルード (SSI) での PATH_INFO</
title>
<
p>SSI で処理されるファイルはデフォルトでは <
code>PATH_INFO</
code>
付きのリクエストを受け入れなくなりました。<
directive module="core">AcceptPathInfo</
directive> ディレクティブで
<
code>PATH_INFO</
code> 付きのリクエストを受け入れるようにサーバを
</
section>
<!-- /pathinfo --><
section id="elements"><
title>基本要素</
title>
<
p>ドキュメントは、SGML のコメントとして特別なコマンドが埋め込まれた
HTML ドキュメントとしてパースされます。コマンドの構文は次のように
<!--#<
var>element</
var> <
var>attribute</
var>=<
var>value</
var>
<
var>attribute</
var>=<
var>value</
var> ... -->
<
p>値 <
transnote>value</
transnote> は二重引用符で囲むのが一般的ですが、
シングルクオート (') とバッククオート (`) も使用できます。
多くのコマンドは属性-値 <
transnote>attribute-value</
transnote> の組を一つだけ指定できます。
コメントの終わり (<
code>--></
code>)
の前には、SSI の句の一部だと解釈されないようにするために空白を
入れてください。最初の <
code><!--#</
code> はまとめて<
em>一つ</
em>の
句で、空白をふくんではいけないこと注意してください。</
p>
<
p>要素 <
transnote>element</
transnote> を以下の表に示します。</
p>
<
tr><
th>要素</
th><
th>説明</
th></
tr>
<
td>configure output formats</
td></
tr>
<
td>print variables</
td></
tr>
<
td>execute external programs</
td></
tr>
<
td>print size of a file</
td></
tr>
<
td>print last modification time of a file</
td></
tr>
<
td>include a file</
td></
tr>
<
td>print all available variables</
td></
tr>
<
tr><
td><
code><
a href="#element.set">set</
a></
code></
td>
<
td>set a value of a variable</
td></
tr>
<
p>SSI 要素は <
module>mod_include</
module> 以外のモジュールで
<
module>mod_cgi</
module> で提供されていて、このモジュールが
ロードされる場合にのみ利用可能となります。</
p>
<
p>次のコマンドは解析の様々な側面を制御します。属性は次の通りです。</
p>
<
dt><
code>echomsg</
code> (<
em>Apache 2.1 以降</
em>)</
dt>
<
directive module="mod_include">SSIUndefinedEcho</
directive>
<
dt><
code>errmsg</
code></
dt>
<
dd>この値が、ドキュメントの解析中にエラーが発生した時に
<
directive module="mod_include">SSIErrorMsg</
directive>
<
dt><
code>sizefmt</
code></
dt>
<
dd>この値は、ファイルのサイズを表示する際に使用する
<
code>bytes</
code>か、Kb や Mb を優先的に使用する
<
code>abbrec</
code> (例えば 1024 バイトは "1K" と表示されます)
<
dt><
code>timefmt</
code></
dt>
<
dd>この値は <
code>strftime(3)</
code> ライブラリルーチンが
</
section>
<!-- /config --> <
p>このコマンドは以下で定義されている <
a href="#includevars">include
変数</
a> を表示します。変数が設定されていない場合は <
directive module="mod_include">SSIUndefinedEcho</
directive> ディレクティブで
決定される結果となります。日付はその時点での <
code>timefmt</
code> に従って
<
dt><
code>var</
code></
dt>
<
dt><
code>encoding</
code></
dt>
<
dd><
p>変数を出力する前に、変数中の特別文字をどのようにエンコードするかを
指定します。<
code>none</
code> に設定されていると、エンコードは行なわれません。
<
code>url</
code> に設定されていると、URL エンコード (%-エンコードとも
呼ばれています。これはリンク等の URL の使用に適切です) が
行なわれます。<
code>echo</
code> 要素の開始時は、デフォルトは
<
code>entity</
code> に設定されています。これはエンティティエンコード
(段落やテキストなどのブロックレベルの HTML エレメントのコンテキストに
適しています) を行ないます。これは <
code>encoding</
code> 属性
を加えることで変更できます。変更は次の <
code>encoding</
code> 属性か、
<
p><
code>encoding</
code> 属性はエンコードの変更をしたい <
code>var</
code>
の<
em>前に</
em> ある必要があることに注意してください。
定義されている特別な文字だけがエンコードされます。
別の文字のエンコーディングの場合は、このエンコーディングは
クロスサイトスクリプティングの問題を避けるために、
<
em>常に</
em>ユーザからのデータをエンコードすべきです。
</
section>
<!-- /echo --> <
p><
code>exec</
code> コマンドは指定されたシェルコマンドや CGI スクリプトを
実行します。<
module>mod_cgi</
module> がサーバに組み込まれているいなければ
なりません。<
directive module="core">Option</
directive>
<
code>IncludesNOEXEC</
code> はこのコマンドを無効にします。
<
dt><
code>cgi</
code></
dt>
<
dd><
p>値は (%-エンコードされた) URL を指定します。パスが
スラッシュ (/) で始まらないときは、ドキュメントからの
相対パスとして扱われます。このパスで参照されているドキュメントは
サーバが CGI スクリプトとして扱っていなくても CGI スクリプトとして
起動されます。ただし、スクリプトのあるディレクトリでは
(<
directive module="mod_alias">ScriptAlias</
directive>
や <
directive module="core">Option</
directive> <
code>ExecCGI</
code>
によって) CGI スクリプトの使用が許可されている必要があります。</
p>
<
p>CGI スクリプトには、クライアントからの元々のリクエストの
<
code>PATH_INFO</
code> とクエリー文字列 (<
code>QUERY_STRING</
code>) が渡されます。
これらは URL パスとして特定<
em>できない</
em>ものです。
<
example><
title>例</
title>
<
p>スクリプトが、出力の代わりに <
code>Location:</
code> ヘッダを返すと、
HTML のアンカー <
transnote>リンク</
transnote> に変換されます。</
p>
<
p><
code>exec cgi</
code> よりも、
<
code><
a href="#includevirtual">include virtual</
a></
code>
の方を使うようにしてください。特に、CGI への追加の引数を
クエリー文字列を使って渡すことは <
code>exec cgi</
code> は
できませんが、<
code>include virtual</
code> は以下のようにして
<
dt><
code>cmd</
code></
dt>
<
dd><
p>サーバは指定された文字列を <
code>/
bin/
sh</
code> を使って
実行します。コマンドは通常の CGI 変数に加えて <
a href="#includevars">include 変数</
a>も使うことができます。</
p>
<
p>ほとんどの場合、<
code><
a href="#includevirtual">#include
virtual</
a></
code> を使う方が <
code>#exec cgi</
code> や <
code>#exec
cmd</
code> を使うよりも良いです。前者 (<
code>#include virtual</
code>)
は標準の Apache のサブリクエスト機構を使ってファイルやスクリプトの
こちらの方がよくテストされメンテナンスされた方法です。</
p>
<
p>さらに、Win32 のようないくつかのプラットフォームや、<
a <
code>exec</
code> ディレクティブのコマンドに
引数を渡したり、コマンドに空白を入れることはできません。
ですから、以下のものは unix の suexec でない設定では動作しますが、
Win32 や suexec を使っている unix では期待した結果にはなりません:</
p>
</
section>
<!-- /exec --> <
p>このコマンドは指定されたファイルの大きさを <
code>sizefmt</
code> の
書式指定に基づいて出力します。属性は次の通りです。</
p>
<
dt><
code>file</
code></
dt>
<
dd>値は解析されているドキュメントの存在するディレクトリからの
<
dt><
code>virtual</
code></
dt>
<
dd> 値は (% エンコードされた) URL-path です。スラッシュ (/) で
始まらないときはドキュメントからの相対パスとして扱われます。
CGI の出力のサイズはプリント<
em>されません</
em>。CGI
スクリプト自体のサイズがプリントされることに注意してください。</
dd>
</
section>
<!-- /fsize --> <
p>このコマンドは指定されたファイルの最終修正時刻を
<
code>timefmt</
code> 書式指定に従って表示します。
指定可能な属性は <
code>fsize</
code> コマンドと同じです。</
p>
</
section>
<!-- /flastmod --> <
p>このコマンドは別の文書やファイルのテキストを解析しているファイルに
挿入します。挿入されるファイルはアクセス制御の管理下にあります。
<
a href="core.html#options">Option</
a> <
code>IncludesNOEXEC</
code>
が設定されている場合、text <
glossary ref="mime-type">MIME タイプ</
glossary>
その他の場合は、クエリー文字列も含め、コマンドで指定された
完全な URL を使って普通に CGI スクリプトが呼び出されます。</
p>
<
p>属性が文書の位置を指定します。include コマンドに与えられたそれぞれの
属性に対して挿入作業が行なわれます。有効な属性は次の通りです。</
p>
<
dt><
code>file</
code></
dt>
<
dd>値は解析されているドキュメントの存在するディレクトリからの
<
code>../</
code> を含んでいたり、絶対パスを指定したりはできません。
ですから、ドキュメントルートの外にあるファイルや、ディレクトリ構造で
常にこの属性よりは、<
code>virtual</
code> 属性を使うようにしてください。
<
dt><
code><
a id="includevirtual" name="includevirtual" <
dd><
p>値は解析されているドキュメントからの (% エンコードされた) URL
です。URL にはスキームやホスト名を含めることはできません。パスと、
もしあればクエリー文字列を指定できるだけです。スラッシュ (/) から
始まらない場合は、ドキュメントからの相対パスとして扱われます。</
p>
<
p>URL は属性から作られ、その URL をクライアントがアクセスしたときに
出力される内容が解析後の出力に含められます。ですから、挿入される
ファイルは入れ子構造にすることができます。</
p>
<
p>指定された URL が CGI プログラムであった場合は、
プログラムが実行され、その出力が解析しているファイル中の
ディレクティブがあった位置に挿入されます。CGI の url に
クエリー URL を入れることもできます。</
p>
<
p>HTML ドキュメントに CGI プログラムの出力を含める方法としては、
<
code>include virtual</
code> の方が <
code>exec cgi</
code> よりも
<
p><
directive module="mod_request">KeptBodySize</
directive>
ディレクティブが設定されていて、かつ、この対象ファイルが
<
transnote>POST リクエストを</
transnote>受け入れできるなら、
POST リクエストを受け取ってサブリクエストを発行する際にも
サブリクエストは GET リクエストとして処理されます。</
p>
</
section>
<!-- /include --> <
p>これは、存在するすべての変数とその値を表示します。Apache 1.3.12 から、
特別な文字は出力される前にエンティティエンコード (詳細は <
a されるようになりました。属性はありません。</
p>
<
example><
title>例</
title>
</
section>
<!-- /printenv --> <
p>これは変数の値を設定します。属性は次の通りです。</
p>
<
dt><
code>var</
code></
dt>
<
dt><
code>value</
code></
dt>
<
example><
title>例</
title>
<!--#set var="category" value="help" -->
</
section>
<!-- /basic elements --><
section id="includevars">
<
title>Include 変数</
title>
<
p>標準 CGI 環境の変数に加えて、<
code>echo</
code> コマンドや、
<
code>if</
code> や <
code>elif</
code>, それにドキュメントから呼び出される
すべてのプログラムから使用できる変数があります。</
p>
<
dt><
code>DATE_GMT</
code></
dt>
<
dd>グリニッジ標準時による現在時刻。</
dd>
<
dt><
code>DATE_LOCAL</
code></
dt>
<
dd>ローカルの標準時による現在時刻。</
dd>
<
dt><
code>DOCUMENT_NAME</
code></
dt>
<
dd>ユーザがリクエストした (ディレクトリを除いた) ファイル名。</
dd>
<
dt><
code>DOCUMENT_URI</
code></
dt>
<
dd>ユーザがリクエストした (% エンコードされた) URL-path。
挿入ファイルが入れ子になっている場合は、解析されている
ドキュメントの URL では<
em>ない</
em>ことに注意してください。</
dd>
<
dt><
code>LAST_MODIFIED</
code></
dt>
<
dd>ユーザがリクエストしたドキュメントの最終修正時刻。</
dd>
<
dt><
code>QUERY_STRING_UNESCAPED</
code></
dt>
<
dd>クエリー文字列がある場合、この変数には (%-デコードされた)
クエリー文字列が代入されていて、shell で使用できるように
<
em>エスケープ</
em>されています (<
code>&</
code>
といった特殊文字にはバックスラッシュが直前に置かれます)。</
dd>
<
section id="substitution"><
title>変数置換</
title>
<
p>変数置換はたいていの場合 SSI ディレクティブの引数として妥当な場所にある
引用符で囲まれた文字列中で行なわれます。これに該当するものには、
<
code>exec</
code>, <
code>flastmod</
code>, <
code>fsize</
code>,
<
code>include</
code>, <
code>echo</
code>, <
code>set</
code> の
各ディレクティブと、条件分岐用のオペレータへの引数があります。
ドル記号はバックスラッシュを使うことで使うことができます:</
p>
<!--#if expr="$a = \$test" -->
<
p>変数名としてみなされる文字列の中で変数への参照を置換する必要があるときは、
シェルでの変数置換のように、中括弧で括ることで区別することができます:</
p>
<!--#set var="Zed" value="${REMOTE_HOST}_${REQUEST_METHOD}" -->
<
p>この例では、<
code>REMOTE_HOST</
code> が
"<
code>X</
code>" で <
code>REQUEST_METHOD</
code> が
"<
code>Y</
code>" のときに変数 <
code>Zed</
code> を "<
code>X_Y</
code>"
<
p>以下の例では、<
code>DOCUMENT_URI</
code> が <
code>/
foo/
file.html</
code>
のときに "in foo" を、<
code>/
bar/
file.html</
code> のときに "in bar" を、
どちらでもないときには "in neither" を表示します。</
p>
<!--#if expr='"$DOCUMENT_URI" = "/
foo/
file.html"' --><
br />
<!--#elif expr='"$DOCUMENT_URI" = "/
bar/
file.html"' --><
br />
<!--#else --><
br />
<
p>基本的なフローコントロール要素は次の通りです。</
p>
<!--#if expr="<
var>test_condition</
var>" --><
br />
<!--#elif expr="<
var>test_condition</
var>" --><
br />
<!--#else --><
br />
<
p><
code>if</
code> 要素はプログラミング言語の
if 文と同じように動作します。条件が評価され、結果が真であれば次の
<
code>elif</
code> か <
code>else</
code> か <
code>endif</
code>
<
p><
code>elif</
code> や <
code>else</
code> 文は <
var>test_condition</
var>
が偽のときにテキストを出力に挿入するために使われます。
これらの要素はあってもなくても構いません。</
p>
<
p><
code>endif</
code> 要素は <
code>if</
code>
<
p><
var>test_condition</
var> は以下のどれかです:</
p>
<
dt><
code><
var>string</
var></
code></
dt>
<
dd><
var>string</
var> が空でない場合に真です</
dd>
<
dt><
code><
var>-A string</
var></
code></
dt>
<
dd><
p><
transnote>httpd の</
transnote>設定を検査して、
文字列で指定した URL にアクセスできる場合 true で、
<
directive>SSIAccessEnable</
directive> が有効のときにのみ
承認されていないユーザからは隠しておきたい URL についての情報、
たとえば URL へのリンクなどがある場合に、便利です。
検査では URL へアクセスできるかの権限のみが行われ、URL
が存在するかどうかについては検査されないことに注意してください。</
p>
<
example><
title>Example</
title>
<!--#if expr="-A /private" --><
br />
Click <a href="/private">here</a> to access private
<
dt><
code><
var>string1</
var> = <
var>string2</
var><
br />
<
var>string1</
var> == <
var>string2</
var><
br />
<
var>string1</
var> != <
var>string2</
var></
code></
dt>
<
dd><
p><
var>string1</
var> と <
var>string2</
var> を比較します。
<
var>string2</
var> が <
code>/<
var>string</
var>/</
code>
という形式であれば、正規表現として比較されます。正規表現は
<
code>==</
code> は単に <
code>=</
code> の別名で、まったく同じ動作を
<
p>正のマッチング (<
code>=</
code> または <
code>==</
code>) の場合は、
正規表現でグループ分けされたパーツをキャプチャすることができます。
キャプチャされた部分は特殊変数 <
code>$1</
code> .. <
code>$9</
code>
<
example><
title>例</
title>
<!--#if expr="$QUERY_STRING = /^sid=([a-zA-Z0-9]+)/" --><
br />
<!--#set var="session" value="$1" --><
br />
<
dt><
code><
var>string1</
var> < <
var>string2</
var><
br />
<
var>string1</
var> <= <
var>string2</
var><
br />
<
var>string1</
var> > <
var>string2</
var><
br />
<
var>string1</
var> >= <
var>string2</
var></
code></
dt>
<
dd><
var>string1</
var> と <
var>string2</
var> を比較します。
<
em>文字列として</
em>比較される (<
code>strcmp(3)</
code> を使用)
ことに注意してください。ですから、文字列 "100" は "20"
<
dt><
code>( <
var>test_condition</
var> )</
code></
dt>
<
dd><
var>test_condition</
var> が真のとき、真</
dd>
<
dt><
code>! <
var>test_condition</
var></
code></
dt>
<
dd><
var>test_condition</
var> が偽のとき、真</
dd>
<
dt><
code><
var>test_condition1</
var> &&
<
var>test_condition2</
var></
code></
dt>
<
dd><
var>test_condition1</
var> かつ
<
var>test_condition2</
var> が真のとき、真</
dd>
<
dt><
code><
var>test_condition1</
var> ||
<
var>test_condition2</
var></
code></
dt>
<
dd><
var>test_condition1</
var> または
<
var>test_condition2</
var> が真のとき、真</
dd>
<
p>"<
em>=</
em>" と "<
em>!=</
em>" の方が "<
em>&&</
em>" より
きつく束縛します。"<
em>!</
em>" の束縛が一番きつくなっています。
<!--#if expr="$a = test1 && $b = test2" --><
br />
<!--#if expr="($a = test1) && ($b = test2)" -->
<
p>真偽値オペレータ <
code>&&</
code> と <
code>||</
code>
これらのオペレータで一方により強い優先度をつけたい場合には、
<
p>変数やオペレータとして認識されないものはすべて文字列として
扱われます。文字列は引用符で囲むこともできます: <
code>'string'</
code>
のように。引用符で囲まれていない文字列には空白 (スペースとタブ)
を含めることはできません。それらは変数などの句を分離するために
使われているからです。複数の文字列が続いているときは、
空白を間に入れて一つにくっつけられます。ですから、</
p>
<
p><
code><
var>string1</
var> <
var >string2</
var></
code> は <
code><
var>string1</
var> <
var >string2</
var></
code> になります。<
br />
<
code>'<
var>string1</
var> <
var >string2</
var>'</
code> は <
code><
var >string1</
var> <
var>string2</
var></
code>
<
note><
title>真偽値表現の最適化</
title>
<
p>式がもっと複雑になり、処理の速度低下が顕著になった場合は、
評価ルールに従って最適化してみると良いでしょう。</
p>
<
li>評価は左から右に向かって行われます。</
li>
<
li>二値真偽値オペレータ (<
code>&&</
code> と <
code>||</
code>)
は、出来る限り短絡評価されます。つまり結果として上記のルールは、
<
module>mod_include</
module> が左の評価式を評価します。
左側で結果を十分決定できる場合は、評価はそこで停止します。
そうでない場合は右側を評価して、左と右の両方から結果を計算します。</
li>
<
li>短絡評価は評価の対象に正規表現が含まれる場合、オフになります。
後方参照する変数 (<
code>$1</
code> .. <
code>$9</
code>)
を埋めるために、実際に評価する必要があるからです。</
li>
<
p>特定の式がどのように扱われるかを知りたい場合は、
<
code>-DDEBUG_INCLUDE</
code> コンパイラオプションを付けて
<
module>mod_include</
module> をリコンパイルすると良いでしょう。
これにより、全てのパースされた式に対して、字句解析情報、
それがどのようにクライアントに送られた出力まで評価されたかを
<
note><
title>正規表現内での / のエスケープ</
title>
<
p>正規表現内でデリミタとして扱いたくない / があれば、それらは全て
正規表現の意味がどうであろうとエスケープは必要です。</
p>
<
description>include 要素を終了させる文字列</
description>
<
syntax>SSIEndTag <
var>tag</
var></
syntax>
<
default>SSIEndTag "-->"</
default>
<
contextlist><
context>server config</
context><
context>virtual host</
context>
<
compatibility>2.0.30 以降で利用可能</
compatibility>
<
p>このディレクティブは <
module>mod_include</
module> が探す、
include 要素の終了を示す文字列を変更します。</
p>
<
example><
title>例</
title>
<
seealso><
directive module="mod_include">SSIStartTag</
directive></
seealso>
<
name>SSIUndefinedEcho</
name>
<
description>未定義の変数が echo されたときに表示される文字列</
description>
<
syntax>SSIUndefinedEcho <
var>string</
var></
syntax>
<
default>SSIUndefinedEcho "(none)"</
default>
<
contextlist><
context>server config</
context><
context>virtual host</
context>
<
context>directory</
context><
context>.htaccess</
context></
contextlist>
<
compatibility>2.0.34 以降で利用可能</
compatibility>
<
p>このディレクティブは変数が定義されていないにも関わらず
"echo" されたときに <
module>mod_include</
module>
<
example><
title>例</
title>
SSIUndefinedEcho "<!-- undef -->"
<
description>SSI のエラーがあったときに表示されるエラーメッセージ</
description>
<
syntax>SSIErrorMsg <
var>message</
var></
syntax>
<
default>SSIErrorMsg "[an error occurred while processing this
directive]"</
default>
<
contextlist><
context>server config</
context><
context>virtual host</
context>
<
context>directory</
context><
context>.htaccess</
context></
contextlist>
<
compatibility>バージョン 2.0.30 以降で使用可能</
compatibility>
<
p><
directive>SSIErrorMsg</
directive> ディレクティブは <
module>mod_include</
module>
がエラーが起こったときに表示するメッセージを変更します。プロダクションサーバでは
デフォルトエラーメッセージを <
code>"<!-- Error -->"</
code>
に変えるというようなことを考えるかもしれません。</
p>
<
p>このディレクティブは <
code><!--#config
errmsg=<
var>message</
var> --></
code> 要素と同じ効果になります。</
p>
<
example><
title>例</
title>
SSIErrorMsg "<!-- Error -->"
<
description>include 要素を開始する文字列</
description>
<
syntax>SSIStartTag <
var>tag</
var></
syntax>
<
default>SSIStartTag "<!--#"</
default>
<
contextlist><
context>server config</
context><
context>virtual host</
context>
<
compatibility>バージョン 2.0.30 以降で使用可能</
compatibility>
<
p>このディレクティブは <
module>mod_include</
module> が探す、include
<
p>二つのサーバで (もしかすると別々の段階で) ファイルの出力を解析していて、
というようなときにこのオプションを使います。</
p>
<
example><
title>例</
title>
SSIStartTag "<%"<
br />
<
directive module="mod_include">SSIEndTag</
directive> を併せて使うと、
下に示す例のように SSI ディレクティブを使えます:</
p>
<
example><
title>違う開始と終了のタグを使った SSI ディレクティブ</
title>
<
seealso><
directive module="mod_include">SSIEndTag</
directive></
seealso>
<
name>SSITimeFormat</
name>
<
description>日付けを現す文字列の書式を設定する</
description>
<
syntax>SSITimeFormat <
var>formatstring</
var></
syntax>
<
default>SSITimeFormat "%A, %d-%b-%Y %H:%M:%S %Z"</
default>
<
context>server config</
context><
context>virtual host</
context>
<
context>directory</
context><
context>.htaccess</
context></
contextlist>
<
compatibility>2.0.30 以降で使用可能</
compatibility>
<
p>このディレクティブは <
code>DATE</
code> 環境変数を echo して日付を現す文字列が
表示されるときの書式を変更します。<
var>formatstring</
var> は
C 標準ライブラリの <
code>strftime(3)</
code> と同じ形式です。</
p>
<
p>このディレクティブは <
code><!--#config
timefmt=<
var>formatstring</
var> --></
code> 要素と同じ効果になります。</
p>
<
example><
title>例</
title>
SSITimeFormat "%R, %B %d, %Y"
<
p>上のディレクティブでは、日付は "22:26, June 14, 2002" という
<
name>SSIAccessEnable</
name>
<
description>条件分岐フローの制御で -A フラグが使えるようにする</
description>
<
syntax>SSIAccessEnable on|off</
syntax>
<
default>SSIAccessEnable off</
default>
<
contextlist><
context>directory</
context><
context>.htaccess</
context></
contextlist>
<
p><
directive>SSIAccessEnable</
directive> ディレクティブを使って、
条件分岐フローの制御で -A 検査が使えるようにします。
<
directive>SSIAccessEnable</
directive> は次の値を引数にとります:</
p>
<
dt><
code>off</
code></
dt>
<
dd><!--#if expr="-A /foo"--> では文字列や正規表現として
解釈され、-A は特別な意味は持ちません。</
dd>
<
dd><!--#if expr="-A /foo"--> では、設定上 URL /foo
にアクセスできない場合 false で、アクセスできる場合は true</
dd>
<
description>実行ビットが設定されたファイルの SSI ディレクティブを
<
syntax>XBitHack on|off|full</
syntax>
<
default>XBitHack off</
default>
<
contextlist><
context>server config</
context><
context>virtual host</
context>
<
context>directory</
context><
context>.htaccess</
context></
contextlist>
<
override>Options</
override>
<
p><
directive>XBitHack</
directive> ディレクティブは通常の HTML
ドキュメントの解析を制御します。このディレクティブは <
glossary ref="mime-type">MIME タイプ</
glossary>
<
code>
text/
html</
code> と関連付けられているファイルにのみ影響します。
<
directive>XBitHack</
directive> は以下の値をとることができます。</
p>
<
dt><
code>off</
code></
dt>
<
dd>実行可能ファイルに対して特別な扱いをしません。</
dd>
<
dd>ユーザの実行ビットが設定されている <
code>
text/
html</
code>
ファイルは全てサーバで解析する html ドキュメントとして扱われます。</
dd>
<
dt><
code>full</
code></
dt>
<
dd><
code>on</
code> と同様ですが、グループ実行ビットもテストします。
もしそれが設定されていれば、返されるファイルの <
code>Last-modified</
code> の
日付をファイルの最終修正時刻にします。それが設定されていないときは、
last-modified の日付は送られません。このビットを設定すると、
クライアントやプロキシがリクエストをキャッシュできるようになります。
<
note><
strong>注意</
strong> 他の CGI を <
code>#include</
code>
するかもしれないものや、各アクセスに対して違う出力を生成する
(もしくは後のリクエストで変わるかもしれないもの)
すべての SSI スクリプトに対してグループ実行ビットが
設定されていないことを確認できない場合は、full は使わない方が良い