1 <?xml version="1.0" encoding="UTF-8"?>
2 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja"><head><!--
4 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
5 This file is generated from xml source: DO NOT EDIT
6 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
8 <title>Apache チュートリアル: Server Side Includes 入門 - Apache HTTP サーバ</title>
9 <link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
10 <link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
11 <link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
12 <link href="../images/favicon.ico" rel="shortcut icon" /></head>
13 <body id="manual-page"><div id="page-header">
14 <p class="menu"><a href="../mod/">モジュール</a> | <a href="../mod/directives.html">ディレクティブ</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">用語</a> | <a href="../sitemap.html">サイトマップ</a></p>
15 <p class="apache">Apache HTTP サーバ バージョン 2.0</p>
16 <img alt="" src="../images/feather.gif" /></div>
17 <div class="up"><a href="./"><img title="<-" alt="<-" src="../images/left.gif" /></a></div>
19 <a href="http://www.apache.org/">Apache</a> > <a href="http://httpd.apache.org/">HTTP サーバ</a> > <a href="http://httpd.apache.org/docs/">ドキュメンテーション</a> > <a href="../">バージョン 2.0</a> > <a href="./">How-To / チュートリアル</a></div><div id="page-content"><div id="preamble"><h1>Apache チュートリアル: Server Side Includes 入門</h1>
21 <p><span>Available Languages: </span><a href="../en/howto/ssi.html" hreflang="en" rel="alternate" title="English"> en </a> |
22 <a href="../ja/howto/ssi.html" title="Japanese"> ja </a> |
23 <a href="../ko/howto/ssi.html" hreflang="ko" rel="alternate" title="Korean"> ko </a></p>
26 <p>サーバサイドインクルードによって、既存の HTML
27 ドキュメントに動的なコンテンツを追加することができます。</p>
29 <div id="quickview"><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#related">はじめに</a></li>
30 <li><img alt="" src="../images/down.gif" /> <a href="#what">SSI とは ?</a></li>
31 <li><img alt="" src="../images/down.gif" /> <a href="#configuring">SSI を許可するためのサーバの設定</a></li>
32 <li><img alt="" src="../images/down.gif" /> <a href="#basic">基本的な SSI ディレクティブ</a></li>
33 <li><img alt="" src="../images/down.gif" /> <a href="#additionalexamples">追加の例</a></li>
34 <li><img alt="" src="../images/down.gif" /> <a href="#config">他に何が設定できるのか ?</a></li>
35 <li><img alt="" src="../images/down.gif" /> <a href="#exec">コマンドの実行</a></li>
36 <li><img alt="" src="../images/down.gif" /> <a href="#advanced">高度な SSI テクニック</a></li>
37 <li><img alt="" src="../images/down.gif" /> <a href="#conclusion">終わりに</a></li>
39 <div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
41 <h2><a name="related" id="related">はじめに</a></h2>
42 <table class="related"><tr><th>関連モジュール</th><th>関連ディレクティブ</th></tr><tr><td><ul><li><code class="module"><a href="../mod/mod_include.html">mod_include</a></code></li><li><code class="module"><a href="../mod/mod_cgi.html">mod_cgi</a></code></li><li><code class="module"><a href="../mod/mod_expires.html">mod_expires</a></code></li></ul></td><td><ul><li><code class="directive"><a href="../mod/core.html#options">Options</a></code></li><li><code class="directive"><a href="../mod/mod_include.html#xbithack">XBitHack</a></code></li><li><code class="directive"><a href="../mod/mod_mime.html#addtype">AddType</a></code></li><li><code class="directive"><a href="../mod/core.html#setoutputfilter">SetOutputFilter</a></code></li><li><code class="directive"><a href="../mod/mod_setenvif.html#browsermatchnocase">BrowserMatchNoCase</a></code></li></ul></td></tr></table>
44 <p>この記事は、通常は単に SSI と呼ばれる Server Side Includes
45 を扱います。この記事においては、サーバでの SSI を許可するための設定と、
46 現在の HTML ページに動的なコンテンツを加えるためのいくつかの基本的な
49 <p>記事の後半では、SSI ディレクティブで SSI
51 幾分高度な事柄について述べています。</p>
53 </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
55 <h2><a name="what" id="what">SSI とは ?</a></h2>
57 <p>SSI (Server Side Includes) は、HTML
59 サーバでページを提供する時に評価されます。SSI は、CGI
60 プログラムやその他の動的な技術で全てのページを提供せずに、
61 動的に生成されたコンテンツを現在の HTML ページに加えます。</p>
63 <p>どういう場合に SSI を使い、どういう場合にプログラムで
64 ページを完全に生成するかは、ページのうちどの程度が静的であり、
65 ページが提供されるたびに再計算する必要がどの程度あるかで通常は決定します。
66 SSI は現在時刻のような小さい情報を加えるにはうってつけの方法です。
67 しかし、そのページのほとんどの部分が提供時に生成される場合は、
69 </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
71 <h2><a name="configuring" id="configuring">SSI を許可するためのサーバの設定</a></h2>
74 <p>サーバで SSI を許可するには、<code>httpd.conf</code>
75 ファイルまたは <code>.htaccess</code>
76 ファイルに次のディレクティブを指定する必要があります:</p>
77 <div class="example"><p><code>
82 ディレクティブで解析させることを許可するということを Apache
83 に伝えます。ほとんどの設定ではお互いを上書きできる、複数の
84 <code class="directive"><a href="../mod/core.html#options">Options</a></code> があることに
85 注意してください。おそらく、設定が最後に評価されることを
86 保証されるために、SSI を使用したいディレクトリに <code>Options</code>
87 ディレクティブを適用する必要があるでしょう。</p>
90 ディレクティブで解析されるというわけではありません。
91 どのファイルが解析されるかを Apache に伝える必要があります。
93 次のディレクティブを使うことで、例えば <code>.shtml</code>
94 のような特別なファイル拡張子を持つファイルを解析するよう
95 Apache に伝えることができます:</p>
96 <div class="example"><p><code>
97 AddType text/html .shtml<br />
98 AddOutputFilter INCLUDES .shtml
101 <p>この方法の欠点は、もし現在のページに SSI ディレクティブを加えたい場合、
103 <code>.shtml</code> 拡張子にするため、そのページの名前と、
104 そのページへの全てのリンクを変更しなければならないことです。</p>
106 <p>もう一つの方法は、<code class="directive"><a href="../mod/mod_include.html#xbithack">XBitHack</a></code>
107 ディレクティブを使用することです:</p>
108 <div class="example"><p><code>
112 <p><code class="directive"><a href="../mod/mod_include.html#xbithack">XBitHack</a></code>
113 は、ファイルの実行ビットが立っている場合、
114 SSI ディレクティブにより解析することを Apache に伝えます。
115 従って、SSI ディレクティブを現在のページに加えるためには、
116 ファイル名を変更しなくてもよく、単に <code>chmod</code>
117 を使用してファイルを実行可能にするだけで済みます。</p>
118 <div class="example"><p><code>
119 chmod +x pagename.html
122 <p>行なうべきではないことに関する短いコメント。時々誰かが、全ての
123 <code>.html</code> ファイルを SSI で解析するよう Apache に伝えれば、
124 わざわざ <code>.shtml</code> というファイル名にする必要がないといって
125 薦めるのを見ることでしょう。こういう人たちは、おそらく
126 <code class="directive"><a href="../mod/mod_include.html#xbithack">XBitHack</a></code>
128 この方法について注意することは、たとえ SSI
129 ディレクティブを全く含まない場合でも、Apache がクライアントに
130 送る全てのファイルを最後まで読み込ませることになります。
131 この方法はかなり処理を遅くするものであり、良くないアイデアです。</p>
133 <p>もちろん、Windows ではそのような実行ビットをセット
134 するようなものはありませんのでオプションが少し制限されています。</p>
136 <p>デフォルトの設定では、Apache は SSI ページについて最終変更時刻や
137 コンテンツの長さを HTTP ヘッダに送りません。
138 動的なコンテンツであるため、それらの値を計算するのが難しいからです。
139 このためドキュメントがキャッシュされなくなり、
140 結果としてクライアントの性能が遅くなったように感じさせることになります。
141 これを解決する方法が二つあります:</p>
144 <li><code>XBitHack Full</code> 設定を使用する。
145 この設定により、もともと要求されたファイルの時刻を参照し、
146 読み込まれるファイルの変更時刻を無視して最終変更時刻を決定するよう
149 <li><a href="../mod/mod_expires.html">mod_expires</a>
150 で提供されているディレクティブを使用して、
151 ファイルが無効になる時刻を明示します。これにより、
152 ブラウザとプロキシにキャッシュが有効であることを通知します。</li>
154 </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
155 <div class="section">
156 <h2><a name="basic" id="basic">基本的な SSI ディレクティブ</a></h2>
158 <p>SSI ディレクティブは以下の文法で記述します:</p>
159 <div class="example"><p><code>
160 <!--#element attribute=value attribute=value ... -->
163 <p>HTML のコメントのような書式をしているので、もし SSI
164 を正しく動作可能にしなければ、ブラウザはそれを無視するでしょう。
165 しかし、HTML ソース中では見えます。もし SSI を正しく設定したなら、
166 ディレクティブはその結果と置き換えられます。</p>
168 <p>element はたくさんあるものから一つ指定することができます。
169 指定できるものの大多数については、次回もう少し詳しく説明します。
170 ここでは、SSI で行なうことができる例をいくつか示します。</p>
172 <h3><a name="todaysdate" id="todaysdate">今日の日付</a></h3>
174 <div class="example"><p><code>
175 <!--#echo var="DATE_LOCAL" -->
178 <p><code>echo</code> 要素は単に変数の値を出力します。
179 CGI プログラムに利用可能な環境変数の全ての
180 セットを含む多くの標準変数があります。また、<code>set</code>
181 要素を用いることで、独自の変数を定義することができます。
184 <p>出力される日付の書式が好きではない場合、その書式を修正するために、
185 <code>config</code> 要素に <code>timefmt</code>
188 <div class="example"><p><code>
189 <!--#config timefmt="%A %B %d, %Y" --><br />
190 Today is <!--#echo var="DATE_LOCAL" -->
194 <h3><a name="lastmodified" id="lastmodified">ファイルの変更日</a></h3>
196 <div class="example"><p><code>
197 This document last modified <!--#flastmod file="index.html" -->
200 <p>この要素も <code>timefmt</code>
204 <h3><a name="cgi" id="cgi">CGI プログラムの結果を取り込む</a></h3>
206 <p>これは、全ての人のお気に入りである ``ヒットカウンタ'' のような
207 CGI プログラムの結果を出力する SSI
208 のより一般的な使用のうちの一つです。</p>
210 <div class="example"><p><code>
211 <!--#include virtual="/cgi-bin/counter.pl" -->
215 </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
216 <div class="section">
217 <h2><a name="additionalexamples" id="additionalexamples">追加の例</a></h2>
220 <p>以下は、SSI を使用して HTML
221 ドキュメントにおいてできることのいくつかの特別な例です。</p>
223 <h3><a name="docmodified" id="docmodified">いつこのドキュメントは修正されたのか
226 <p>先に、ドキュメントが最後に変更されたのはいつかを
227 ユーザに通知するために SSI を使用することができることを述べました。
228 しかしながら、実際の方法は、いくぶん問題のままにしておきました。
229 HTML ドキュメントに配置された次のコードは、ページにそのような
230 タイムスタンプを入れるでしょう。もちろん、上述のように、
231 SSI を正しく動作可能にしておく必要があります。</p>
232 <div class="example"><p><code>
233 <!--#config timefmt="%A %B %d, %Y" --><br />
234 This file last modified <!--#flastmod file="ssi.shtml" -->
237 <p>もちろん、<code>ssi.shtml</code>
238 の部分を実際の当該ファイル名と置き換える必要があります。
239 もし、あらゆるファイルに張ることができる一般的なコードを探しているなら、
240 これは不便であるかもしれません。おそらくその場合は、
241 そうする代わりに変数 <code>LAST_MODIFIED</code>
243 <div class="example"><p><code>
244 <!--#config timefmt="%D" --><br />
245 This file last modified <!--#echo var="LAST_MODIFIED" -->
248 <p><code>timefmt</code>
249 書式についてのより詳細については、お好みの検索サイトに行き、
250 <code>strftime</code> で検索してみてください。文法は同じです。</p>
253 <h3><a name="standard-footer" id="standard-footer">標準のフッタを挿入する</a></h3>
256 <p>もし数ページを超えるページを持つサイトを管理しているならば、
257 全ページに対して変項を行なうことが本当に苦痛となり得ることが
258 分かるでしょう。全てのページに渡ってある種の標準的な外観を
259 維持しようとしているならば特にそうでしょう。</p>
261 <p>ヘッダやフッタ用の挿入用ファイルを使用することで、
262 このような更新にかかる負担を減らすことができます。
263 一つのフッタファイルを作成し、それを <code>include</code>
264 SSI コマンドで各ページに入れるだけで済みます。<code>include</code>
265 要素は、<code>file</code> 属性または <code>virtual</code>
266 属性のいずれかを使用してどのファイルを挿入するかを決めることができます。
267 <code>file</code> 属性は、<em>カレントディレクトリからの相対パスで示された
269 それは / で始まる絶対ファイルパスにはできず、また、そのパスの一部に ../
270 を含むことができないことを意味します。<code>virtual</code>
271 属性は、おそらくより便利だと思いますが、提供するドキュメントからの相対
272 URL で指定すべきです。それは / で始めることができますが、
273 提供するファイルと同じサーバ上に存在しなくてはなりません。</p>
274 <div class="example"><p><code>
275 <!--#include virtual="/footer.html" -->
278 <p>私は最後の二つを組み合わせて、<code>LAST_MODIFIED</code>
279 ディレクティブをフッタファイルの中に置くことがよくあります。
280 SSI ディレクティブは、挿入用のファイルに含ませたり、
281 挿入ファイルのネストをしたりすることができます。すなわち、
282 挿入用のファイルは他のファイルを再帰的に挿入することができます。</p>
285 </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
286 <div class="section">
287 <h2><a name="config" id="config">他に何が設定できるのか ?</a></h2>
290 <p>時刻書式を <code>config</code> で設定できることに加えて、
291 更に二つ <code>config</code> で設定することができます。</p>
293 <p>通常、SSI ディレクティブで何かがうまくいかないときは、
295 <div class="example"><p><code>
296 [an error occurred while processing this directive]
299 <p>このメッセージを他のものにしたい場合、<code>config</code>
300 要素の <code>errmsg</code> 属性で変更することができます:</p>
301 <div class="example"><p><code>
302 <!--#config errmsg="[It appears that you don't know how to use SSI]" -->
305 <p>おそらく、エンドユーザはこのメッセージを決して見ることはありません。
306 なぜなら、そのサイトが生きた状態になる前に SSI ディレクティブに関する
307 全ての問題を解決しているはずだからです。(そうですよね?)</p>
309 <p>そして、<code>config</code> において <code>sizefmt</code>
311 返されるファイルサイズの書式を設定することができます。
312 バイト数には <code>bytes</code> を、適当に Kb や Mb
313 に短縮させるには <code>abbrev</code> を指定することができます。</p>
314 </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
315 <div class="section">
316 <h2><a name="exec" id="exec">コマンドの実行</a></h2>
319 <p>今後数ヶ月のうちに、小さな CGI プログラムと SSI
320 を使用する記事を出したいと考えています。ここではそれとは別に、
321 <code>exec</code> 要素によって行なうことができることを示します。
322 SSI にシェル (正確には <code>/bin/sh</code>。Win32 ならば DOS シェル)
323 を使用してコマンドを実行させることができます。
324 下記の例では、ディレクトリリスト出力を行ないます。</p>
325 <div class="example"><p><code>
327 <!--#exec cmd="ls" --><br />
332 <div class="example"><p><code>
334 <!--#exec cmd="dir" --><br />
338 <p>Windows 上では、このディレクティブによっていくつかの奇妙な
339 書式に気づくでしょう。なぜなら <code>dir</code> の出力が文字列
340 ``<<code>dir</code>>'' を含み、ブラウザを混乱させるからです。</p>
342 <p>この機能は非常に危険であり、どんなコードでも <code>exec</code>
343 タグに埋め込まれてしまえば実行することに注意してください。例えば
344 `` ゲストブック '' のように、もし、
345 ユーザがページの内容を編集できる状況にあるならば、
346 この機能を確実に抑制してください。<code>Options</code>
347 ディレクティブの <code>IncludesNOEXEC</code> 引数を指定することで、
348 SSI は許可するけれど <code>exec</code>
349 機能は許可しないようにすることができます。</p>
350 </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
351 <div class="section">
352 <h2><a name="advanced" id="advanced">高度な SSI テクニック</a></h2>
355 <p>コンテンツを出力することに加え、Apache SSI は変数を設定し、
356 そして比較と条件分岐にその変数を使用できる機能を提供しています。
359 <h3><a name="caveat" id="caveat">警告</a></h3>
361 <p>この記事で述べた大部分の機能は、Apache 1.2
362 以降を使用している場合のみ利用可能です。もちろん、もし Apache 1.2
363 以降を使用してない場合、直ちにアップグレードする必要があります。
364 さぁ、今それを行ないなさい。それまで待っています。</p>
367 <h3><a name="variables" id="variables">変数を設定する</a></h3>
369 <p><code>set</code> ディレクティブを使用して、
370 後で使用するために変数を設定することができます。
371 これは後の説明で必要になるので、ここでそれについて述べています。
373 <div class="example"><p><code>
374 <!--#set var="name" value="Rich" -->
377 <p>このように単純に文字どおりに設定することに加え、
378 <a href="../env.html">環境変数</a>や上記の変数
379 (例えば <code>LAST_MODIFIED</code> のような)
380 を含む他のあらゆる変数を値を設定するのに使用することができます。
381 変数名の前にドル記号 ($) を使用することで、
382 それがリテラル文字列ではなくて変数であることを示します。</p>
383 <div class="example"><p><code>
384 <!--#set var="modified" value="$LAST_MODIFIED" -->
387 <p>ドル記号 ($) を文字として変数の値に入れるには、
388 バックスラッシュによってドル記号をエスケープする必要があります。</p>
389 <div class="example"><p><code>
390 <!--#set var="cost" value="\$100" -->
393 <p>最後になりますが、長い文字列の中に変数を置きたい場合で、
395 それらの文字について混乱してしまう場合、この混乱を取り除くため、
397 (これについての良い例を示すのは難しいのですが、
400 <div class="example"><p><code>
401 <!--#set var="date" value="${DATE_LOCAL}_${DATE_GMT}" -->
405 <h3><a name="conditional" id="conditional">条件式</a></h3>
409 それらの値を設定して比較することができるのですから、
410 条件を表すためにそれらを使用することができます。これにより
411 SSI はある種の小さなプログラミング言語になっています。
412 <code class="module"><a href="../mod/mod_include.html">mod_include</a></code> は条件を表現するために <code>if</code>,
413 <code>elif</code>, <code>else</code>, <code>endif</code>
415 一つの実際のページから複数の論理ページを効果的に生成することができます。</p>
417 <p>条件構造は以下のとおりです:</p>
418 <div class="example"><p><code>
419 <!--#if expr="test_condition" --><br />
420 <!--#elif expr="test_condition" --><br />
421 <!--#else --><br />
425 <p><em>test_condition</em>
426 はあらゆる種類の論理的比較をすることができます。
427 値を比較したり、その値が ``真'' かどうかを評価します
428 (空でないなら与えられた文字列は真です)。
429 利用可能な比較演算子の全てのリストについては、
430 <code class="module"><a href="../mod/mod_include.html">mod_include</a></code> ドキュメンテーションを参照してください。
431 ここでは、この構造をどう使用するかの例をいくつか示します。</p>
433 <p>設定ファイルで次の行を記述します:</p>
434 <div class="example"><p><code>
435 BrowserMatchNoCase macintosh Mac<br />
436 BrowserMatchNoCase MSIE InternetExplorer
439 <p>これはクライアントが Macintosh
440 上でインターネットエクスプローラが動いている場合、環境変数
441 ``Mac'' と ``InternetExplorer'' を真と設定します。</p>
443 <p>次に、SSI が可能になったドキュメントで以下を行ないます:
445 <div class="example"><p><code>
446 <!--#if expr="${Mac} && ${InternetExplorer}" --><br />
447 Apologetic text goes here<br />
448 <!--#else --><br />
449 Cool JavaScript code goes here<br />
453 <p>Mac 上の IE に対して何か思うところがあるわけでありません。
454 他では実行できているいくつかの JavaScript を Mac 上の IE
455 で実行させるのに、先週数時間苦労したというだけのことです。
456 上の例はその暫定的な対処方法です。</p>
458 <p>他のどんな変数 (あなたが定義するもの、
459 または普通の環境変数のいずれか) も、条件文に使用することができます。
460 Apache は <code>SetEnvIf</code> ディレクティブや他の関連
461 ディレクティブを使用して環境変数を設定することができます。
463 に頼ることなくかなり複雑な動的なことをさせることができます。</p>
465 </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
466 <div class="section">
467 <h2><a name="conclusion" id="conclusion">終わりに</a></h2>
470 や動的なウェブページを生成する他の技術に代わるものではありません。
472 少量の動的なコンテンツを加えるにはすぐれた方法です。</p>
474 <div class="bottomlang">
475 <p><span>Available Languages: </span><a href="../en/howto/ssi.html" hreflang="en" rel="alternate" title="English"> en </a> |
476 <a href="../ja/howto/ssi.html" title="Japanese"> ja </a> |
477 <a href="../ko/howto/ssi.html" hreflang="ko" rel="alternate" title="Korean"> ko </a></p>
478 </div><div id="footer">
479 <p class="apache">Copyright 2009 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
480 <p class="menu"><a href="../mod/">モジュール</a> | <a href="../mod/directives.html">ディレクティブ</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">用語</a> | <a href="../sitemap.html">サイトマップ</a></p></div>