クライアントが入力したデータ (選択項目名、注文内容等) に応じてレスポンス (表示内容) が変化すれば、よりダイナミックな web が実現できる。
サーバーが受信した要求データから、クライアントの入力データを取り出してスクリプト プログラム等に渡す仕組みを CGI (Common Gateway Interface) という。
CGI を使用可能にするためのディレクティブには次のようなものがある。
URL を該当ディレクトリへマップし、CGI スクリプトとして実行可能にする。
ScriptAlias URL-path directory
正規表現の URL を該当ディレクトリへマップし、CGI スクリプトとして実行可能にする。
ScriptAliasMatch 正規表現-path directory
正規表現とは文字列パターンを表現する手法で、ここでは「メタ文字」と呼ばれる記号を用いている。
基本的なメタ文字には次のようなものがある。
メタ文字 | 意味 |
^ | 文字列の先頭。 |
. | 任意の 1 文字。 |
* | 直前のパターンの 0 回以上の繰り返し。 |
+ | 直前のパターンの 1 回以上の繰り返し。 |
? | 直前のパターンが 0 回または 1 回現れる。 |
$ | 文字列の末尾。 |
( ) | パターンのグループ化。
グループ化パターンにマッチした部分 (URLパス) は特殊変数に仮保存される。
特殊変数はグループ左側から順に $1, $2, $3, .... が割り当てられる。
|
ScriptAliasMatch で例示した設定 ^/~(.*)/cgi-bin/(.*) は、次のような文字列と解釈される。
- ^/~
文字列の先頭部分が /~ であること。
- 左側の (.*)
任意の 1 文字と、そのパターンの 0 回以上の繰り返し (1 文字以上の任意の文字列)。
この部分にマッチした文字列は特殊変数 $1 に保存される。
- /cgi-bin/
文字列 /cgi-bin/ を指定。
- 右側の (.*)
任意の 1 文字と、そのパターンの 0 回以上の繰り返し。
この部分にマッチした文字列は特殊変数 $2 に保存される。
総合すると検出対象パターンは下記のような文字列となる。
^/~(任意の文字列)/cgi-bin/(任意の文字列)
したがって、リクエスト URL の http://www.project.ed.jp/~user123/cgi-bin/test.cgi は、
/~user123/cgi-bin/test.cgi の部分がマッチする。
グループ化パターンにマッチした user123 は $1 に、test.cgi は $2 に保存され、マップ先ディレクトリは /home/user123/cgi-bin/test.cgi が生成される。
ファイルが参照された時の動作をあらかじめ規定しておき、その規定動作に付けた名称をハンドラという。
Apache ではファイル拡張子や格納したディレクトリによってハンドラを指定できる。
ハンドラは
Action,
AddHandler,
SetHandler といったディレクティブで追加できる外、標準でサーバーに組み込まれているものもある。
Apache の組み込みハンドラは以下の通り。
- send-as-is
HTTPヘッダを含め、ファイルをそのままの形式で送信する。
- cgi-script
ファイルを CGI スクリプトとして実行可能にする。
ただし、Options の ExecCGIがセットされていなければならない。
- imap-file
イメージ マップ ファイルを指定する。
- server-info
サーバーの設定情報を取得する。
- server-status
サーバーの現在のステータスを取得する。
- type-map
コンテンツ ネゴシエーション用のタイプ マップ ファイルとして解析する。
ファイルの拡張子をハンドラに関連付ける。
AddHandler handler 拡張子リスト
このディレクティブが記述された、<Directory>, <Location>, <Files> セクション内のすべてのファイルに、指定されたハンドラを関連付ける。
SetHandler (handler | None)
- handler
規定動作のハンドラ(*)名を指定する。
- None
前方の SetHandler によって設定されたハンドラを無効にする。
- 以下の記述は、各ユーザーの cgi-bin ディレクトリ内にあるすべてのファイルを cgi-script として関連付けることを指示する。
- ディレクトリに配置した .htaccess に SetHandler を記述した場合、当該ディレクトリ内のすべてのファイルに指定されたハンドラを関連付ける。
特定のハンドラまたは MIME タイプに対して指定の CGI を適用する。
Action type cgi-path
- type
規定動作のハンドラ(*)名、または MIME タイプを指定する。
- cgi-path
CGI として実行可能(*)なファイルへのパスを設定する。
- 設定例。
- ハンドラの場合。
拡張子が .spex であるファイルへのリクエストには、CGI スクリプト
/cgi-bin/special.cgi が適用される。
- MIME タイプの場合。
MIME タイプが text/javascript であるファイルへのリクエストには、CGI スクリプト /cgi-bin/java.cgi が適用される。