<html xmlns="http://www.w3.org/1999/xhtml"><head></head><body><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="6" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[6]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">CGI</anchor> の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">メタ変数</anchor> <dfn><code class="CGI" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">PATH_TRANSLATED</anchor></code></dfn> は、
<code class="CGI" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">PATH_INFO</anchor></code> を単独の <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">URL</anchor> とみなしたときに<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">鯖</anchor>の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">文書リポジトリー</anchor>において相当する位置を表します。</p><section><h1>仕様書</h1><refs xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><ul xmlns="http://www.w3.org/1999/xhtml"><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="17" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[17]</anchor-end> <cite xml:lang="en">RFC 3875 - The Common Gateway Interface (CGI) Version 1.1</cite><ul><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="4" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[4]</anchor-end> <strong><anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="http://tools.ietf.org/html/rfc3875#section-4.1.6">http://tools.ietf.org/html/rfc3875#section-4.1.6</anchor-external></strong></li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="18" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[18]</anchor-end> <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="http://tools.ietf.org/html/rfc3875#section-7">http://tools.ietf.org/html/rfc3875#section-7</anchor-external></li></ul></li></ul></refs></section><section><h1>構文</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="7" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[7]</anchor-end> 値の構文は次のように定義されています <src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="4" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;4</anchor-internal></src>。<pre class="ABNF code">      PATH_TRANSLATED = *&lt;any character&gt;</pre></p><section><h1>文字</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="8" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[8]</anchor-end> 認められている<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">文字</anchor>の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">集合</anchor>は<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">システム定義</anchor>です。 <src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="4" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;4</anchor-internal></src></p><comment-p xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="9" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[9]</anchor-end> これは<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ファイル・システム</anchor>および<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">オペレーティング・システム</anchor>で認められている<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ファイル名</anchor>の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">文字</anchor>を意図しているように思われます。</comment-p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="16" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[16]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Unix</anchor> では <code class="charname" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">NUL</anchor></code> を除く任意の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">8ビット・バイト</anchor>です。
<src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="18" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;18</anchor-internal></src></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="19" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[19]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">EBCDIC</anchor> を使う <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">POSIX</anchor> 環境では <code class="charname" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">NUL</anchor></code> を除く <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">IBM1047</anchor>
です。 <src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="18" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;18</anchor-internal></src></p></section></section><section><h1>処理</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="10" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[10]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">要求</anchor>の <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">URL</anchor> を元に新たな <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">URL</anchor><figure><pre>      &lt;scheme&gt; &quot;://&quot; &lt;server-name&gt; &quot;:&quot; &lt;server-port&gt; &lt;extra-path&gt;</pre></figure>... を組み立てます。ここで<figure class="list"><ul><li><code class="URI" xml:lang="en">scheme</code> は<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">クライアント</anchor>との<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">プロトコル</anchor></li><li><code class="URI" xml:lang="en">server-name</code> は <code class="CGI" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">SERVER_NAME</anchor></code></li><li><code class="URI" xml:lang="en">server-port</code> は <code class="CGI" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">SERVER_PORT</anchor></code></li><li><code class="URI" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">extra-path</anchor></code> は <code class="CGI" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">PATH_INFO</anchor></code> を、 <code class="URI"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">;</anchor></code>、
<code class="URI" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">?</anchor></code>、<code class="URI" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">=</anchor></code> を<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">予約</anchor>して<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">パーセント符号化</anchor>したもの</li></ul></figure>... とします。この時、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">鯖</anchor>によって定義されている<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">文書リポジトリー</anchor> (<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ファイル・システム</anchor>)
との対応関係に従って当該システム上の <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">path</anchor> に変換した値を <code class="CGI" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">PATH_TRANSLATED</anchor></code>
とします。 <src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="4" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;4</anchor-internal></src></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="11" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[11]</anchor-end> 実際にどのような変換が行われるかは<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">実装定義</anchor>です。実際に変換結果が<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">文書リポジトリー</anchor>上に存在するかは問いません。
ただし<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">文書リポジトリー</anchor>が<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">大文字</anchor>と<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">小文字</anchor>を区別しない場合を除き、両者の違いを保存しなければ<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><strong xmlns="http://www.w3.org/1999/xhtml">なりません</strong></anchor>。 <src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="4" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;4</anchor-internal></src></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="12" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[12]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">鯖</anchor>は、<code class="CGI" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">PATH_INFO</anchor></code> 部分が元の <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">URL</anchor> に含まれているなら、
<code class="CGI" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">PATH_TRANSLATED</anchor></code> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">メタ変数</anchor>も設定する<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><strong xmlns="http://www.w3.org/1999/xhtml">べきです</strong></anchor>。 <src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="4" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;4</anchor-internal></src></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="13" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[13]</anchor-end> <code class="CGI" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">PATH_INFO</anchor></code> が <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">NULL</anchor> なら、 <code class="CGI" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">PATH_TRANSLATED</anchor></code>
も <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">NULL</anchor> (<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">空文字列</anchor>または未設定) でなければ<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><strong xmlns="http://www.w3.org/1999/xhtml">なりません</strong></anchor>。 <src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="4" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;4</anchor-internal></src></p></section><section><h1>安全性</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="20" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[20]</anchor-end> <code class="CGI" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">PATH_INFO</anchor></code> の項を参照してください。</p></section><section><h1>歴史</h1><figure class="quote"><figcaption><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="5" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[5]</anchor-end> 6.1.7. PATH_TRANSLATED (CGI/1.1 draft 03)</figcaption><blockquote><pre>   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.</pre></blockquote><p>PATH_TRANSLATED は要求 URI (第6.1.6節参照)の path-info (経路情報)
から取って、復号し (第3.1節参照)、 URI として解析し、
サーバーの文書庫構造に適切に対応させる仮想‐物理変換を施したもの
です。要求 URI が path-info 部品を含んでいなければ、
PATH_TRANSLATED メタ変数は定義する<strong>べきではありません</strong>。</p><pre>    PATH_TRANSLATED = *CHAR</pre><p>For a request such as the following:<pre>   
    http://somehost.com/cgi-bin/somescript/this%2eis%2epath%2einfo</pre></p><p>the PATH_INFO component would be decoded, and the result
parsed as though it were a request for the following:</p><p>上記のような要求で、 PATH_INFO 部品は復号され、
結果は次のような要求であるとして解析されます。</p><pre>    http://somehost.com/this.is.the.path.info</pre><p>This would then be translated to a location in the server's
document repository, perhaps a filesystem path something like
this:</p><p>これはサーバーの文書庫の位置に変換されます。
このような感じのファイル系統経路になるでしょう。</p><pre>    /usr/local/www/htdocs/this.is.the.path.info</pre><p>The result of the translation is the value of PATH_TRANSLATED.</p><p>変換の結果が PATH_TRANSLATED 値です。</p><pre>   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.</pre><p>PATH_TRANSLATED 値は妥当な文書庫の位置に対応していても
していなくても構いません。サーバーは、文書庫が名前で大文字・小文字を
区別する場合においては、またその場合に限って、 path-info
部分の大文字・小文字を保存し<strong>なければなりません</strong>。
文書庫が、文書名について大文字・小文字を区別するだけ、保存するだけ、
あるいは区別しない時は、サーバーは変換を通じて元の部分の
大文字・小文字を保存する必要はありません。</p><p>The translation algorithm the server uses to derive
PATH_TRANSLATED is implementation defined; CGI scripts which
use this variable may suffer limited portability.</p><p>サーバーが PATH_TRANSLATED を得るのに使う変換算法は
実装定義です。この値を使う CGI スクリプトは移植性に制限を受ける
かもしれません。</p><p>Servers SHOULD provide this metavariable to scripts if and
only if the request URI includes a path-info component.</p><p>サーバーは、要求 URI が path-info 部品を含んでいる場合、
しかもその場合に限って、このメタ変数をスクリプトに提供する<strong>べき</strong>です。</p></figure></section><section><h1>実装</h1><ul><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="1" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[1]</anchor-end> Apache/1.3.27 で、この値を取得したら <samp><var>DOCUMENT_ROOT</var>/foo</samp> という値が、 <code><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Alias</anchor></code> した階層の下にあるときに得られることがあります。不具合のような気もしますが、この値を生成する算法は実装依存ってことですから、そういう仕様っていうならそういうもんなんでしょう(謎)。</li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="2" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[2]</anchor-end> <anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="1" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;1</anchor-internal> なに言ってるんか分かりませんけど、 <code>Alias /bar/ /path/to/bar/</code> してあって、 <code class="URI">/bar/path/to/cgi/foo</code> を要求したときに、 <code class="CGI">PATH_INFO</code> は <samp>/foo</samp> になりまして、 <code class="CGI">PATH_TRANSLATED</code> は <samp>/path/to/bar/path/to/cgi/foo</samp> になることが期待されます。ところが、 <anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="1" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;1</anchor-internal> では <samp>/document/root/foo</samp> が得られたというのです。</li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="3" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[3]</anchor-end> <anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="1" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;1</anchor-internal>-2 は <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">SSI</anchor> や SSI から呼んだ CGI から見た時も同様です。</li></ul></section><section><h1>メモ</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="14" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[14]</anchor-end> 元々は<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ファイル・システム</anchor>上のファイルを<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">CGIスクリプト</anchor>で何らかの形でフィルタリングしたものを返すことを想定していたのでしょう。
現在では <code class="CGI" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">PATH_INFO</anchor></code> をそのように使うことはほとんど無く、従って
<code class="CGI" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">PATH_TRANSLATED</anchor></code> が使われることもほとんどないようです。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="15" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[15]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Apache</anchor> で <code><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">SetHandler</anchor></code> を使って <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">CGIスクリプト</anchor>を割り当てると、
元々の <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">URL</anchor> が指していた<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ファイル</anchor>が <code class="CGI" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">PATH_TRANSLATED</anchor></code>
の値となると記憶しています <src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">要出典</src>。</p></section></body></html>