[an error occurred while processing this directive]
[APACHE DOCUMENTATION]

Apache HTTP Server Version 1.3

PATH_INFO Changes in the CGI Environment


概要

Apache 1.1.1と初期版で実現されたように、CGI環境にPATH_INFOを作るためにApacheが使った方法はcounterintuitiveで、ある場合にはクラッシュを引き起こします。Apache 1.2とそれ以降で、この作動は変更しています。これはある受け継がれたCGIアプリケーションについていくつかの適合性の問題を生じますが、Apache 1.2の作動は、まだCGI/1.1の仕様と適合性があり、CGIスクリプトは簡単に修正されます。(see below).

問題

Apache 1.1.1と初期版はURLではなくファイル名を見ることによって、PATH_INFOとSCRIPT_NAMEの環境変数を実現しています。一方、これは多くの場合に正確な値を生じて、ファイルシステムパスがパス情報を含んでオーバーロードされた時、誤作動を生じます。例えば、もし以下がコンフィグファイルに現われれば:

     Alias /cgi-ralph /usr/local/httpd/cgi-bin/user.cgi/ralph

この場合user.cgiはCGIスクリプトで、"/ralph"はCGIをパスするための情報です。もし、このコンフィギュレーションがいつもの決まった所にあって、要求が"/cgi-ralph/script/"について来れば、コードは"/ralph/script"に対するPATH_INFOと、/cgi-に対するSCRIPT_NAMEをセットします。明らかに後者は間違っています。場合によっては、これはサーバをクラッシュさせます。

解決法

Apache 1.2とそれ以降は現在、URLでディレクトリを見ること、どの位多くのURLがクライアント側で修正可能かを決定することと、それに対してPATH_INFOをセットすることによってSCRIPT_NAMEとPATH_INFOを決定しています。 上記の例を使うことによって、PATH_INFOは"/script"に対してセットし、"/cgi-ralph"に対するSCRIPT_NAMEを決定します。これは道理にかなっており、サーバ動作の問題を起こしません。それはまた"http://$SERVER_NAME:$SERVER_PORT$SCRIPT_NAME$PATH_INFO" が現在のスクリプトや前のバージョンのApacheでは必ずしも正しくないものにポイントしているアクセス可能なURLになることを保証するスクリプトを認めることです。

しかしながら、Alias命令からの"/ralph"情報は失われています。これは不運なことですが、この種の情報に沿ってパスするファイルシステムを使うことは薦められる方法ではなく、それを利用しているスクリプトは作動しないも同然です。Apache 1.2b3とそれ以降では 次善策を提供しています。

以前のサーバとの互換性

古いPATH_INFOの変数が提供している情報を必要とするApacheの初期版や他のサーバについてデザインされたスクリプトを必要とするかもしれません。そのために、Apache 1.2 (1.2b3とそれ以降)は付加的な変数であるFILEPATH_INFOをセットします。この環境変数はPATH_INFOがApache 1.1.1について持っていた値を含んでいます。

Apache 1.2と初期版の両方を作動させようとするスクリプトは、単にFILEPATH_INFOの存在をテストすることができ、もし有効なら使うことができます。それ以外にはPATH_INFOを使うことができます。例えば、パールで使うなら:

    $path_info = $ENV{'FILEPATH_INFO'} || $ENV{'PATH_INFO'};

こうすることにより、スクリプトはApacheの全てのバージョンを含む、全てのサーバがサポートしているCGI/1.1仕様で作動することができます。


Apache HTTP Server Version 1.3

検索文字
Index The English original manual is here.
このページの情報に関わる、ご質問、お問い合わせは、 japache@infoscience.co.jpまで。

JAPACHE ホームページ