PATH_TRANSLATED

メタ変数 PATH_TRANSLATED (CGI)

[6] CGIメタ変数 PATH_TRANSLATED は、 PATH_INFO を単独の URL とみなしたときに文書リポジトリーにおいて相当する位置を表します。

仕様書

構文

[7] 値の構文は次のように定義されています >>4

      PATH_TRANSLATED = *<any character>

文字

[8] 認められている文字集合システム定義です。 >>4

[9] これはファイル・システムおよびオペレーティング・システムで認められているファイル名文字を意図しているように思われます。

[16] Unix では NUL を除く任意の8ビット・バイトです。 >>18

[19] EBCDIC を使う POSIX 環境では NUL を除く IBM1047 です。 >>18

処理

[10] 要求URL を元に新たな URL

      <scheme> "://" <server-name> ":" <server-port> <extra-path>
... を組み立てます。ここで
... とします。この時、によって定義されている文書リポジトリー (ファイル・システム) との対応関係に従って当該システム上の path に変換した値を PATH_TRANSLATED とします。 >>4

[11] 実際にどのような変換が行われるかは実装定義です。実際に変換結果が文書リポジトリー上に存在するかは問いません。 ただし文書リポジトリー大文字小文字を区別しない場合を除き、両者の違いを保存しなければなりません>>4

[12] は、PATH_INFO 部分が元の URL に含まれているなら、 PATH_TRANSLATED メタ変数も設定するべきです>>4

[13] PATH_INFONULL なら、 PATH_TRANSLATEDNULL (空文字列または未設定) でなければなりません>>4

安全性

[20] PATH_INFO の項を参照してください。

歴史

[5] 6.1.7. PATH_TRANSLATED (CGI/1.1 draft 03)
   PATH_TRANSLATED is derived by taking any path-info component
   of the request URI (see section 6.1.6), decoding it (see
   section 3.1), parsing it as a URI in its own right, and
   performing any virtual-to-physical translation appropriate to
   map it onto the server's document repository structure. If the
   request URI includes no path-info component, the
   PATH_TRANSLATED metavariable SHOULD NOT be defined.

PATH_TRANSLATED は要求 URI (第6.1.6節参照)の path-info (経路情報) から取って、復号し (第3.1節参照)、 URI として解析し、 サーバーの文書庫構造に適切に対応させる仮想‐物理変換を施したもの です。要求 URI が path-info 部品を含んでいなければ、 PATH_TRANSLATED メタ変数は定義するべきではありません

    PATH_TRANSLATED = *CHAR

For a request such as the following:

   
    http://somehost.com/cgi-bin/somescript/this%2eis%2epath%2einfo

the PATH_INFO component would be decoded, and the result parsed as though it were a request for the following:

上記のような要求で、 PATH_INFO 部品は復号され、 結果は次のような要求であるとして解析されます。

    http://somehost.com/this.is.the.path.info

This would then be translated to a location in the server's document repository, perhaps a filesystem path something like this:

これはサーバーの文書庫の位置に変換されます。 このような感じのファイル系統経路になるでしょう。

    /usr/local/www/htdocs/this.is.the.path.info

The result of the translation is the value of PATH_TRANSLATED.

変換の結果が PATH_TRANSLATED 値です。

   The value of PATH_TRANSLATED may or may not map to a valid
   repository location. Servers MUST preserve the case of the
   path-info segment if and only if the underlying repository
   supports case-sensitive names. If the repository is only
   case-aware, case-preserving, or case-blind with regard to
   document names, servers are not required to preserve the case
   of the original segment through the translation.

PATH_TRANSLATED 値は妥当な文書庫の位置に対応していても していなくても構いません。サーバーは、文書庫が名前で大文字・小文字を 区別する場合においては、またその場合に限って、 path-info 部分の大文字・小文字を保存しなければなりません。 文書庫が、文書名について大文字・小文字を区別するだけ、保存するだけ、 あるいは区別しない時は、サーバーは変換を通じて元の部分の 大文字・小文字を保存する必要はありません。

The translation algorithm the server uses to derive PATH_TRANSLATED is implementation defined; CGI scripts which use this variable may suffer limited portability.

サーバーが PATH_TRANSLATED を得るのに使う変換算法は 実装定義です。この値を使う CGI スクリプトは移植性に制限を受ける かもしれません。

Servers SHOULD provide this metavariable to scripts if and only if the request URI includes a path-info component.

サーバーは、要求 URI が path-info 部品を含んでいる場合、 しかもその場合に限って、このメタ変数をスクリプトに提供するべきです。

実装

メモ

[14] 元々はファイル・システム上のファイルをCGIスクリプトで何らかの形でフィルタリングしたものを返すことを想定していたのでしょう。 現在では PATH_INFO をそのように使うことはほとんど無く、従って PATH_TRANSLATED が使われることもほとんどないようです。

[15] ApacheSetHandler を使って CGIスクリプトを割り当てると、 元々の URL が指していたファイルPATH_TRANSLATED の値となると記憶しています 要出典