From: Yoshiki Hayashi このモジュールはファイルがクライアントに送られる前に処理するフィルタを
- 提供します。処理の内容は要素と呼ばれる特別な形式の SGML コメントにより
+ 提供します。処理の内容は要素と呼ばれる特別な形式の SGML コメントにより
制御されます。これらの要素は条件分岐や、他のファイルや
プログラムの出力の取り込み、環境変数の設定や表示を行なうことが
できます。 以下のディレクティブは shtml ファイルのあるディレクトリで指定されている
- 必要があります (通常は <Directory>
セクション
- で指定しますが、AllowOverride Options
が設定されていると、
- .htaccess ファイルに書くこともできます):Options
+ が設定されていると、.htaccess
ファイルに書くこともできます):
text/html
になります)。
詳しい情報は Server Side - Includes のチュートリアル を読んでください。
+ href="../howto/ssi.html">Tutorial on Server Side Includes. + - +SSI で処理されるファイルはデフォルトでは PATH_INFO
+ (後続のパス名情報)
+ 付きのリクエストを受け入れなくなりました。PATH_INFO
付きのリクエストを受け入れるようにサーバを
+ 設定できます。
ドキュメントは、SGML のコメントとして特別なコマンドが埋め込まれた HTML ドキュメントとしてパースされます。コマンドの構文は次のように なっています:
<!--#
element attribute=value
- attribute=value ... -->
+ <!--#element attribute=value
+ attribute=value ... -->
値 (訳注: value) は二重引用符で囲まれることがよくあります。多くのコマンドは - 属性-値 (訳注: attribute-value) の組を一つだけ指定できます。 +
値 (訳注: value) は二重引用符で囲むのが一般的ですが、
+ シングルクオート (') とバッククオート (`) も使用できます。
+ 多くのコマンドは属性-値 (訳注: attribute-value) の組を一つだけ指定できます。
コメントの終わり (-->
)
の前には、SSI の句の一部だと解釈されないようにするために空白を
- 入れてください。
要素 (訳注: element) には以下のものを指定することができます:
- -このコマンドはパース時の振る舞いを制御します。指定可能な属性は:
- -要素 | 説明 |
---|---|
config |
+ configure output formats |
echo |
+ print variables |
exec |
+ execute external programs |
fsize |
+ print size of a file |
flastmod |
+ print last modification time of a file |
include |
+ include a file |
printenv |
+ print all available variables |
set |
+ set a value of a variable |
SSI 要素は exec
要素は
+
次のコマンドは解析の様々な側面を制御します。属性は次の通りです。
+ +errmsg
sizefmt
bytes
か、Kb や Mb を優先的に使用する
+ abbrec
(例えば 1024 バイトは "1K" と表示されます)
+ です。timefmt
strftime(3)
ライブラリルーチンが
+ 日時をプリントする際に用いられます。このコマンドは以下で定義されている include
+ 変数 を表示します。変数が設定されていない場合は timefmt
に従って
+ 表示されます。属性は次の通りです。
var
encoding
変数を出力する前に、変数中の特別文字をどのようにエンコードするかを
+ 指定します。none
に設定されていると、エンコードは行なわれません。
+ url
に設定されていると、URL エンコード (%-エンコードとも
+ 呼ばれています。これはリンク等の URL の使用に適切です) が
+ 行なわれます。echo
要素の開始時は、デフォルトは
+ entity
に設定されています。これはエンティティエンコード
+ (段落やテキストなどのブロックレベルの HTML エレメントのコンテキストに
+ 適しています) を行ないます。これは encoding
属性
+ を加えることで変更できます。変更は次の encoding
属性か、
+ 要素の終了まで効力を持ちます。
encoding
属性はエンコードの変更をしたい var
+ の前に ある必要があることに注意してください。
+ また、ISO-8859-1 エンコーディングで
+ 定義されている特別な文字だけがエンコードされます。
+ 別の文字のエンコーディングの場合は、このエンコーディングは
+ 望みの結果にならないかもしれません。
exec
コマンドは指定されたシェルコマンドや CGI スクリプトを
+ 実行します。IncludesNOEXEC
はこのコマンドを無効にします。
+ 使用可能な属性は次の通りです。
cgi
値は (%-エンコードされた) URL を指定します。パスが
+ スラッシュ (/) で始まらないときは、ドキュメントからの
+ 相対パスとして扱われます。このパスで参照されているドキュメントは
+ サーバが CGI スクリプトとして扱っていなくても CGI スクリプトとして
+ 起動されます。ただし、スクリプトのあるディレクトリでは
+ (ExecCGI
+ によって) CGI スクリプトの使用が許可されている必要があります。
CGI スクリプトには、クライアントからの元々のリクエストの
+ PATH_INFO
とクエリー文字列 (QUERY_STRING
) が渡されます。
+ これらは URL パスとして特定できないものです。
+ スクリプトは標準 CGI 環境に加えて、include 変数を
+ 使用することができます。
bytes
と、
- 状況に応じて Kb や Mb を使う abbrev
です。スクリプトが、出力の代わりに Location:
ヘッダを返すと、
+ HTML のアンカー (訳注:リンク) に変換されます。
exec cgi
よりも、
+ include virtual
+ の方を使うようにしてください。特に、CGI への追加の引数を
+ クエリー文字列を使って渡すことは exec cgi
は
+ できませんが、include virtual
は以下のようにして
+ 可能です。
strftime(3)
ライブラリ関数が
- 使う文字列です。このコマンドは以下で定義されている include
- 変数 を表示します。変数が設定されていない場合は (none)
- と表示されます。日付はその時点での timefmt
に従って
- 表示されます。
属性:
- -echo
要素の開始時は、デフォルトは
- "entity" に設定されています。これはエンティティエンコード
- (段落やテキストなどのブロックレベルの HTML エレメントのコンテキストに
- 適しています) を行ないます。これは encoding
属性
- を加えることで変更できます。変更は次の encoding
属性か、
- 要素の終了まで効力を持ちます。encoding
属性は
- エンコードの変更をしたい var
の前に ある
- 必要があることに注意してください。また、ISO-8859-1 エンコーディングで
- 定義されている特別な文字だけがエンコードされます。
- 別の文字のエンコーディングが使われている場合、このエンコーディングは
- 望みの結果をもたらさないかもしれません。これは、Apache 1.3.12 以降
- で使用可能です。以前のバージョンはエンコードを行ないません。cmd
サーバは指定された文字列を /bin/sh
を使って
+ 実行します。コマンドは通常の CGI 変数に加えて include 変数も使うことができます。
ほとんどの場合、#include
+ virtual
を使う方が #exec cgi
や #exec
+ cmd
を使うよりも良いです。前者 (#include virtual
)
+ は標準の Apache のサブリクエスト機構を使ってファイルやスクリプトの
+ 出力を取り込みます。
+ こちらの方がよくテストされメンテナンスされた方法です。
さらに、Win32 のようないくつかのプラットフォームや、suexec を使っている unix では、
+ exec
ディレクティブのコマンドに
+ 引数を渡したり、コマンドに空白を入れることはできません。
+ ですから、以下のものは unix の suexec でない設定では動作しますが、
+ Win32 や suexec を使っている unix では期待した結果にはなりません:
exec コマンドは指定されたシェルコマンドや CGI スクリプトを
- 実行します。
値は (%-エンコードされた) URL を指定します。パスが
- スラッシュ (/) で始まらないときは、ドキュメントからの
- 相対パスとして扱われます。このパスで参照されているドキュメントは
- サーバが CGI スクリプトとして扱っていなくても CGI スクリプトとして
- 起動されます。ただし、スクリプトのあるディレクトリでは
- (
CGI スクリプトには PATH_INFO とクライアントからの - 元々のリクエストのクエリー文字列が渡されます。スクリプトは標準 - CGI 環境に加えて、include 変数を - 使用することができます。
- -例えば:
- -スクリプトが出力の代わりに Location: ヘッダを返すと、 - HTML のアンカーに変換されます。
- -exec cgi
よりも、
- include virtual
- の方を使うようにしてください。特に、CGI への追加の引数を
- クエリー文字列を使って渡すことは exec cgi
は
- できませんが、include virtual
は以下のようにして
- 可能です。
サーバは指定された文字列を /bin/sh
を使って
- 実行します。コマンドは通常の CGI 変数に加えて include 変数も使うことができます。
ほとんどいつも、#include
- virtual
を使う方が #exec cgi
や #exec
- cmd
を使うよりも良い方法です。前者 (#include virtual
)
- は標準の Apache のサブリクエスト機構を使ってファイルやスクリプトの
- 出力を取り込みます。その方法の方がよりたくさん試され、
- よく維持されています。
さらに、Win32 のようないくつかのプラットフォームや、suexec
- を使っている unix では、exec
ディレクティブのコマンドに
- 引数を渡したり、コマンドに空白を入れることはできません。
- ですから、以下のものは unix の suexec でない設定では動作しますが、
- Win32 や suexec を使っている unix では期待した結果にはなりません:
このコマンドは指定されたファイルの大きさを sizefmt
の
+ 書式指定に基づいて出力します。属性は次の通りです。
file
virtual
このコマンドは指定されたファイルの最終修正時刻を
+ timefmt
書式指定に従って表示します。
+ 指定可能な属性は fsize
コマンドと同じです。
このコマンドは別の文書やファイルのテキストを解析しているファイルに
+ 挿入します。挿入されるファイルはアクセス制御の管理下にあります。
+ 解析しているファイルの存在するディレクトリに
+ Option IncludesNOEXEC
+ が設定されている場合、text MIME タイプ (text/plain
,
+ text/html
等) のドキュメントのみインクルードが行なわれます。
+ その他の場合は、クエリー文字列も含め、コマンドで指定された
+ 完全な URL を使って普通に CGI スクリプトが呼び出されます。
属性が文書の位置を指定します。include コマンドに与えられたそれぞれの + 属性に対して挿入作業が行なわれます。有効な属性は次の通りです。
+ +file
../
を含んでいたり、絶対パスを指定したりはできません。
+ ですから、ドキュメントルートの外にあるファイルや、ディレクトリ構造で
+ 上位にあるファイルを挿入することはできません。
+ 常にこの属性よりは、virtual
属性を使うようにしてください。
このコマンドは指定されたファイルの大きさを sizefmt
の
- 書式指定に基づいて出力します。属性は:
virtual
値は解析されているドキュメントからの (% エンコードされた) URL + です。URL にはスキームやホスト名を含めることはできません。パスと、 + もしあればクエリー文字列を指定できるだけです。スラッシュ (/) から + 始まらない場合は、ドキュメントからの相対パスとして扱われます。
-URL は属性から作られ、その URL をクライアントがアクセスしたときに + 出力される内容が解析後の出力に含められます。ですから、挿入される + ファイルは入れ子構造にすることができます。
-指定された URL が CGI プログラムであった場合は、 + プログラムが実行され、その出力が解析しているファイル中の + ディレクティブがあった位置に挿入されます。CGI の url に + クエリー URL を入れることもできます。
-timefmt
書式指定に従って表示します。
- 指定可能な属性は fsize
コマンドと同じです。このコマンドは別の文書やファイルのテキストを解析しているファイルに - 挿入します。挿入されるファイルはアクセス制御の管理下にあります。 - 解析しているファイルの存在するディレクトリに - Option IncludesNOEXEC が - 設定されていて、文書の挿入によりプログラムが実行されるような場合は、 - その文書は挿入されません。その Option の設定は CGI スクリプトの実行を - 禁止するからです。その他の場合は、 - クエリー文字列も含め、コマンドで指定された - 完全な URL を使って普通に CGI スクリプトが呼び出されます。
- -属性が文書の位置を指定します。include コマンドに与えられたそれぞれの - 属性に対して挿入作業が行なわれます。有効な属性は:
- -../
を含んでいたり、絶対パスを指定したりはできません。
- ですから、ドキュメントルートの外にあるファイルや、ディレクトリ構造で
- 上位にあるファイルを挿入することはできません。
- 常にこの属性よりは、virtual
属性を使うようにしてください。
- 値は解析されているドキュメントからの (% エンコードされた) URL - です。URL にはスキームやホスト名を含めることはできません。パスと、 - もしあればクエリー文字列を指定できるだけです。スラッシュ (/) から - 始まらない場合は、ドキュメントからの相対パスとして扱われます。
- -URL は属性から作られ、その URL をクライアントがアクセスしたときに - 出力される内容が解析後の出力に含められます。ですから、挿入される - ファイルは入れ子構造にすることができます。
- -指定された URL が CGI プログラムであった場合は、 - プログラムが実行され、その出力が解析しているファイル中の - ディレクティブがあった位置に挿入されます。CGI の url に - クエリー URL を入れることもできます:
- -HTML ドキュメントに CGI プログラムの出力を含める方法としては、
- include virtual
の方が exec cgi
よりも
- 好ましい方法です。
HTML ドキュメントに CGI プログラムの出力を含める方法としては、
+ include virtual
の方が exec cgi
よりも
+ 好ましい方法です。
これは、存在するすべての変数とその値を表示します。Apache 1.3.12 から、
特別な文字は出力される前にエンティティエンコード (詳細は echo
要素を参照) されるようになりました。
- 属性はありません。
例えば:
+ href="#element:echo">echo
要素を参照)
+ されるようになりました。属性はありません。
- printenv 要素は Apache 1.2 以降でのみ使用可能です。
-これは変数の値を設定します。属性は次の通りです。
-var
value
例えば:
- -set 要素は Apache 1.2 以降でのみ使用可能です。
-DATE_GMT
DATE_LOCAL
DOCUMENT_NAME
DOCUMENT_URI
LAST_MODIFIED
QUERY_STRING_UNESCAPED
&
+ といった特殊文字にはバックスラッシュが直前に置かれます)。変数置換はたいていの場合 SSI ディレクティブの引数として妥当な場所にある 引用符で囲まれた文字列中で行なわれます。これに該当するものには、 @@ -380,159 +385,168 @@ 各ディレクティブと、条件分岐用のオペレータへの引数があります。 ドル記号はバックスラッシュを使うことで使うことができます:
-変数名としてみなされる文字列の中で変数への参照を置換する必要があるときは、 シェルでの変数置換のように、中括弧で括ることで区別することができます:
-この例では、REMOTE_HOST
が
"X
" で REQUEST_METHOD
が
"Y
" のときに変数 Zed
を "X_Y
"
に設定します。
例: 以下の例では、DOCUMENT_URI が /foo/file.html のときに - "in foo" を、/bar/file.html のときに "in bar" を、どちらでもないときには - "in neither" を表示します:
- -以下の例では、DOCUMENT_URI
が /foo/file.html
+ のときに "in foo" を、/bar/file.html
のときに "in bar" を、
+ どちらでもないときには "in neither" を表示します。
Apache 1.2 以降で使用できます。基本フロー制御要素は:
+基本的なフローコントロール要素は次の通りです。
-if
要素はプログラミング言語の
- if 文と同じように動作します。条件が評価され、結果が真であれば
- elif
か
- else
か endif
- までの文字列が出力に挿入されます。
if
要素はプログラミング言語の
+ if 文と同じように動作します。条件が評価され、結果が真であれば次の
+ elif
か else
か endif
+ 要素までの文字列が出力に挿入されます。
elif
や else
- 文は test_condition が偽のときにテキストを出力に挿入するために使われます。
+
elif
や else
文は test_condition
+ が偽のときにテキストを出力に挿入するために使われます。
これらの要素はあってもなくても構いません。
endif
要素は if
+
endif
要素は if
要素を終了させます。この要素は必須です。
test_condition は以下のどれかです:
+test_condition は以下のどれかです:
string
string1 = string2
+ string1 != string2
string1 と string2 を比較します。
+ string2 が /string/
という形式であれば、正規表現として比較されます。正規表現は
- Unix の egrep
コマンドと同じ構文です。
正のマッチング (=
) の場合は、
+ 正規表現でグループ分けされたパーツをキャプチャすることができます。
+ キャプチャされた部分は特殊変数 $1
.. $9
+ に格納されます。
string1 < string2
+ string1 <= string2
+ string1 > string2
+ string1 >= string2
strcmp(3)
を使用)
+ ことに注意してください。ですから、文字列 "100" は "20"
+ よりも小さいことになります。( test_condition )
! test_condition
test_condition1 &&
+ test_condition2
test_condition1 ||
+ test_condition2
"=" と "!=" の方が "&&" より きつく束縛します。"!" の束縛が一番きつくなっています。 ですから以下の二つは等価です:
-変数やオペレータとして認識されないものはすべて文字列として
- 扱われます。文字列は引用符で囲むこともできます: 'string'
+ 扱われます。文字列は引用符で囲むこともできます: 'string'
のように。引用符で囲まれていない文字列には空白 (スペースとタブ)
を含めることはできません。それらは変数などの句を分離するために
使われているからです。複数の文字列が続いているときは、
空白を間に入れて一つにくっつけられます。ですから、
string1 string2 は string1 string2 になります-
'string1 string2' は string1 string2 になります-
mod_include の機能を使って、国際化され、カスタマイズされたエラー - ドキュメントを提供するための方法を説明した - 文書があります。
- -server-side includes で処理されるファイルは PATH_INFO
- (後に付いたパス名の情報) 付きのリクエストを受け付けなくなりました。
- PATH_INFO の付いたリクエストを受け付けるように設定するために、
string1 string2
は string1 string2
になります。
+
+ また、
+
+ 'string1 string2'
は string1 string2
+ になります。
このディレクティブは mod_include が探す、include 要素の終了を示す - 文字列を変更します。
+このディレクティブは
このディレクティブは変数が定義されていないにも関わらず - "echo" されたときに mod_include が表示する文字列を - 変更します。
+ "echo" されたときにSSIErrorMsg ディレクティブは mod_include がエラーが起こったときに - 表示するメッセージを変更します。プロダクションサーバでは +
"<!-- Error -->"
に変えるというようなことを考えるかもしれません。
このディレクティブは <!--#config
- errmsg=message -->
要素と同じ効果になります。
このディレクティブは mod_include が探す、include 要素の開始を - 示す文字列を変更します。
+このディレクティブは
二つのサーバが (もしかすると違うときに) ファイルの出力を解析していて、 それぞれに違うコマンドを処理させたい、 というようなときにこのオプションを使います。
-上の例と、それに対応する
このディレクティブは DATE 環境変数を echo して日付を現す文字列が - 表示されるときの書式を変更します。formatstring は - C 標準ライブラリの strftime(3) と同じ形式です。
+このディレクティブは DATE
環境変数を echo して日付を現す文字列が
+ 表示されるときの書式を変更します。formatstring は
+ C 標準ライブラリの strftime(3)
と同じ形式です。
このディレクティブは <!--#config
- timefmt=formatstring -->
要素と同じ効果になります。
上のディレクティブでは、日付は "22:26, June 14, 2002" という 形式で表示されます。
-XBitHack ディレクティブは通常の HTML ドキュメントの解析を
- 制御します。このディレクティブは MIME タイプ text/html
- と関連付けられているファイルにのみ影響します。XBitHack は
- 以下の値をとることができます:
text/html
と関連付けられているファイルにのみ影響します。
+
off
on
と同様ですが、グループ実行ビットもテストします。
- もしそれが設定されていれば、返されるファイルの Last-modified の
- 日付をファイルの最終修正時刻にします。それが設定されていないときは、
- last-modified の日付は送られません。このビットを設定すると、
- クライアントやプロキシがリクエストをキャッシュできるようになります。
-
- #include
- するかもしれないものや、各アクセスに対して違う出力を生成する
- (もしくは後のリクエストで変わるかもしれないもの)
- すべての SSI スクリプトに対してグループ実行ビットが
- 設定されていないことを確認できない場合は、full は使わない方が良い
- でしょう。on
text/html
+ ファイルは全てサーバで解析する html ドキュメントとして扱われます。full
on
と同様ですが、グループ実行ビットもテストします。
+ もしそれが設定されていれば、返されるファイルの Last-modified
の
+ 日付をファイルの最終修正時刻にします。それが設定されていないときは、
+ last-modified の日付は送られません。このビットを設定すると、
+ クライアントやプロキシがリクエストをキャッシュできるようになります。
+
+ #include
+ するかもしれないものや、各アクセスに対して違う出力を生成する
+ (もしくは後のリクエストで変わるかもしれないもの)
+ すべての SSI スクリプトに対してグループ実行ビットが
+ 設定されていないことを確認できない場合は、full は使わない方が良い
+ でしょう。httpd.conf
ファイルに加えます。
サーバ設定の情報へのアクセスを制限するために、
でなければ、ディレクティブの設定は表示されません。
.htaccess
) を含むすべての設定ファイルで
ハンドラを使用可能であるということにも注意してください。
これは、あなたのサイトではセキュリティに関連した問題があるかもしれません。
@@ -52,7 +52,7 @@ SetHandler server-info
データベース名など、他の Apache モジュールの設定ディレクティブから
セキュリティ上微妙な情報を漏らす可能性があります。
このモジュールの動作方法のせいで、情報の流出を防ぐ方法はありません。
- ですから、このモジュールはちゃんとアクセスが制御された環境で、
+ ですから、このモジュールはきちんとアクセス制御された環境でのみ、
注意して使ってください。
これは、string の内容がモジュール module-name +
これは、string の内容がモジュール module-name の追加情報 として HTML として解釈され、表示されるようにします。例:
-