75429b361faff4e3109d7e5962f70d2d65271f60yoshiki<?xml-stylesheet type="text/xsl" href="/style/manual.ja.xsl"?>
a99c5d4cc3cab6a62b04d52000dbc22ce1fa2d94coar<!-- English Revision: 151408:1673945 (outdated) -->
031b91a62d25106ae69d4693475c79618dd5e884fielding Licensed to the Apache Software Foundation (ASF) under one or more
031b91a62d25106ae69d4693475c79618dd5e884fielding contributor license agreements. See the NOTICE file distributed with
031b91a62d25106ae69d4693475c79618dd5e884fielding this work for additional information regarding copyright ownership.
031b91a62d25106ae69d4693475c79618dd5e884fielding The ASF licenses this file to You under the Apache License, Version 2.0
031b91a62d25106ae69d4693475c79618dd5e884fielding (the "License"); you may not use this file except in compliance with
031b91a62d25106ae69d4693475c79618dd5e884fielding the License. You may obtain a copy of the License at
acc36ab93565d2880447d535da6ca6e5feac7a70nd Unless required by applicable law or agreed to in writing, software
acc36ab93565d2880447d535da6ca6e5feac7a70nd distributed under the License is distributed on an "AS IS" BASIS,
acc36ab93565d2880447d535da6ca6e5feac7a70nd WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
acc36ab93565d2880447d535da6ca6e5feac7a70nd See the License for the specific language governing permissions and
acc36ab93565d2880447d535da6ca6e5feac7a70nd limitations under the License.
208651a016b098f4fa1f6279559f104d70f1632dtakashi <p>この文書は Apache がリクエストの URL から送信するファイルの
208651a016b098f4fa1f6279559f104d70f1632dtakashi ファイルシステム上の位置を決定する方法を説明します。</p>
208651a016b098f4fa1f6279559f104d70f1632dtakashi<section id="related"><title>関連するモジュールとディレクティブ</title>
75429b361faff4e3109d7e5962f70d2d65271f60yoshiki<modulelist>
75429b361faff4e3109d7e5962f70d2d65271f60yoshiki</modulelist>
75429b361faff4e3109d7e5962f70d2d65271f60yoshiki<directivelist>
75429b361faff4e3109d7e5962f70d2d65271f60yoshiki<directive module="mod_speling">CheckSpelling</directive>
75429b361faff4e3109d7e5962f70d2d65271f60yoshiki<directive module="mod_proxy">ProxyPassReverse</directive>
18d6d78c596e3e6193fbef9cfbd33618cec13f19kawai<directive module="mod_proxy">ProxyPassReverseCookieDomain</directive>
18d6d78c596e3e6193fbef9cfbd33618cec13f19kawai<directive module="mod_proxy">ProxyPassReverseCookiePath</directive>
75429b361faff4e3109d7e5962f70d2d65271f60yoshiki<directive module="mod_alias">RedirectMatch</directive>
75429b361faff4e3109d7e5962f70d2d65271f60yoshiki<directive module="mod_rewrite">RewriteCond</directive>
75429b361faff4e3109d7e5962f70d2d65271f60yoshiki<directive module="mod_rewrite">RewriteMatch</directive>
75429b361faff4e3109d7e5962f70d2d65271f60yoshiki<directive module="mod_alias">ScriptAlias</directive>
75429b361faff4e3109d7e5962f70d2d65271f60yoshiki<directive module="mod_alias">ScriptAliasMatch</directive>
75429b361faff4e3109d7e5962f70d2d65271f60yoshiki</directivelist>
75429b361faff4e3109d7e5962f70d2d65271f60yoshiki<section id="documentroot"><title>DocumentRoot</title>
208651a016b098f4fa1f6279559f104d70f1632dtakashi <p>リクエストに対してどのファイルを送信するかを決定するときの
208651a016b098f4fa1f6279559f104d70f1632dtakashi Apache のデフォルトの動作は、リクエストの URL-Path (URL のホスト名と
208651a016b098f4fa1f6279559f104d70f1632dtakashi ポート番号の後に続く部分) を取り出して設定ファイルで指定されている
208651a016b098f4fa1f6279559f104d70f1632dtakashi の最後に追加する、というものです。ですから、
208651a016b098f4fa1f6279559f104d70f1632dtakashi の下のディレクトリやファイルがウェブから見える基本のドキュメントの木構造を
208651a016b098f4fa1f6279559f104d70f1632dtakashi <p>Apache にはサーバが複数のホストへのリクエストを受け取る
208651a016b098f4fa1f6279559f104d70f1632dtakashi この場合、それぞれのバーチャルホストに対して違う
208651a016b098f4fa1f6279559f104d70f1632dtakashi モジュールにより提供されるディレクティブを使って、
208651a016b098f4fa1f6279559f104d70f1632dtakashi 送信するためのコンテンツの場所をリクエストされた IP
208651a016b098f4fa1f6279559f104d70f1632dtakashi アドレスやホスト名から動的に決めることもできます。</p>
208651a016b098f4fa1f6279559f104d70f1632dtakashi<section id="outside"><title>DocumentRoot 外のファイル</title>
208651a016b098f4fa1f6279559f104d70f1632dtakashi <p>ファイルシステム上の、
208651a016b098f4fa1f6279559f104d70f1632dtakashi 厳密には <directive module="core">DocumentRoot</directive>
208651a016b098f4fa1f6279559f104d70f1632dtakashi の下にはない部分へのウェブアクセスを許可する必要がある
208651a016b098f4fa1f6279559f104d70f1632dtakashi 場合がよくあります。Apache はこのために複数の方法を用意しています。
208651a016b098f4fa1f6279559f104d70f1632dtakashi Unix システムでは、ファイルシステムの他の部分をシンボリックリンクを
208651a016b098f4fa1f6279559f104d70f1632dtakashi 使って <directive module="core">DocumentRoot</directive>
208651a016b098f4fa1f6279559f104d70f1632dtakashi の下に持ってくることができます。セキュリティ上の理由により、
208651a016b098f4fa1f6279559f104d70f1632dtakashi Apache は該当するディレクトリの
208651a016b098f4fa1f6279559f104d70f1632dtakashi <code>FollowSymLinks</code> か <code>SymLinksIfOwnerMatch</code> が
208651a016b098f4fa1f6279559f104d70f1632dtakashi ある場合にのみシンボリックリンクをたどります。</p>
208651a016b098f4fa1f6279559f104d70f1632dtakashi <p>代わりの方法として、<directive module="mod_alias">Alias</directive>
208651a016b098f4fa1f6279559f104d70f1632dtakashi ディレクティブを使ってファイルシステムの任意の部分をウェブの空間に
208651a016b098f4fa1f6279559f104d70f1632dtakashi マップできます。たとえば、</p>
208651a016b098f4fa1f6279559f104d70f1632dtakashi <p>という設定のときは、URL
208651a016b098f4fa1f6279559f104d70f1632dtakashi <code>http://www.example.com/docs/dir/file.html</code> には
208651a016b098f4fa1f6279559f104d70f1632dtakashi <directive module="mod_alias">ScriptAlias</directive> も、
208651a016b098f4fa1f6279559f104d70f1632dtakashi 対象となっているパスが CGI スクリプトとして扱われるという追加の
208651a016b098f4fa1f6279559f104d70f1632dtakashi 効果以外は同じように動作します。</p>
208651a016b098f4fa1f6279559f104d70f1632dtakashi <p>もっと柔軟な設定が必要な状況では、
208651a016b098f4fa1f6279559f104d70f1632dtakashi <directive module="mod_alias">AliasMatch</directive> ディレクティブや
208651a016b098f4fa1f6279559f104d70f1632dtakashi <directive module="mod_alias">ScriptAliasMatch</directive> ディレクティブ
208651a016b098f4fa1f6279559f104d70f1632dtakashi を使って強力な正規表現に基づいたマッチと置換を行なうことができます。
57fbfdce466d9a43dd4c161c901360f8f2ad2757yoshiki<example>ScriptAliasMatch ^/~([a-zA-Z0-9]+)/cgi-bin/(.+)
208651a016b098f4fa1f6279559f104d70f1632dtakashi <p>は <code>http://example.com/~user/cgi-bin/script.cgi</code> への
208651a016b098f4fa1f6279559f104d70f1632dtakashi リクエストを <code>/home/user/cgi-bin/script.cgi</code> というパスへ
208651a016b098f4fa1f6279559f104d70f1632dtakashi マップし、このマップの結果としてのファイルを CGI スクリプトとして
208651a016b098f4fa1f6279559f104d70f1632dtakashi <code>~user/</code> として参照できます。<module>mod_userdir</module>
208651a016b098f4fa1f6279559f104d70f1632dtakashi モジュールはこの概念をウェブに拡張して、
208651a016b098f4fa1f6279559f104d70f1632dtakashi それぞれのユーザのホームディレクトリのファイルを
208651a016b098f4fa1f6279559f104d70f1632dtakashi 以下のような URL を使ってアクセスできるようにします。</p>
75429b361faff4e3109d7e5962f70d2d65271f60yoshiki<example>http://www.example.com/~user/file.html</example>
208651a016b098f4fa1f6279559f104d70f1632dtakashi <p>セキュリティの観点から、ウェブからユーザのホームディレクトリへ
208651a016b098f4fa1f6279559f104d70f1632dtakashi 直接アクセスできるようにすることは適切ではありません。ですから、
208651a016b098f4fa1f6279559f104d70f1632dtakashi <directive module="mod_userdir">UserDir</directive> ディレクティブには
208651a016b098f4fa1f6279559f104d70f1632dtakashi ユーザのホームディレクトリの下の、ウェブファイルの
208651a016b098f4fa1f6279559f104d70f1632dtakashi 置かれているディレクトリを指定します。デフォルトの設定の
208651a016b098f4fa1f6279559f104d70f1632dtakashi <code>/home/user/public_html/file.html</code> というようなファイルに
208651a016b098f4fa1f6279559f104d70f1632dtakashi <code>/etc/passwd</code> で指定されているユーザのホームディレクトリです。</p>
208651a016b098f4fa1f6279559f104d70f1632dtakashi <p><directive module="mod_userdir">Userdir</directive> には、
208651a016b098f4fa1f6279559f104d70f1632dtakashi システムでも使うことのできる他の形式もあります。</p>
208651a016b098f4fa1f6279559f104d70f1632dtakashi を格好が悪いと思って、ユーザのディレクトリを表すために別の文字列の
208651a016b098f4fa1f6279559f104d70f1632dtakashi 使用を好む人がいます。mod_userdir はこの機能をサポートしていません。
208651a016b098f4fa1f6279559f104d70f1632dtakashi しかし、ユーザのホームディレクトリが規則的な構成のときは、
208651a016b098f4fa1f6279559f104d70f1632dtakashi <directive module="mod_alias">AliasMatch</directive> を使って望みの
208651a016b098f4fa1f6279559f104d70f1632dtakashi 効果を達成することができます。たとえば、
208651a016b098f4fa1f6279559f104d70f1632dtakashi <code>http://www.example.com/upages/user/file.html</code> が
208651a016b098f4fa1f6279559f104d70f1632dtakashi <code>/home/user/public_html/file.html</code> にマップされるようにするには、
57fbfdce466d9a43dd4c161c901360f8f2ad2757yoshiki<example>AliasMatch ^/upages/([a-zA-Z0-9]+)/?(.*)
208651a016b098f4fa1f6279559f104d70f1632dtakashi <p>上の節で説明した設定用のディレクティブは Apache に
208651a016b098f4fa1f6279559f104d70f1632dtakashi ファイルシステムの特定の場所からコンテンツを取ってきて
208651a016b098f4fa1f6279559f104d70f1632dtakashi クライアントに送り返すようにします。ときには、その代わりに
208651a016b098f4fa1f6279559f104d70f1632dtakashi クライアントにリクエストされたコンテンツは別の URL にあることを
208651a016b098f4fa1f6279559f104d70f1632dtakashi 知らせて、クライアントが新しい URL へ新しいリクエストを行なうように
208651a016b098f4fa1f6279559f104d70f1632dtakashi 呼ばれていて、<directive module="mod_alias">Redirect</directive>
208651a016b098f4fa1f6279559f104d70f1632dtakashi ディレクティブにより実装されています。たとえば、
208651a016b098f4fa1f6279559f104d70f1632dtakashi <directive module="core">DocumentRoot</directive> の下のディレクトリ
208651a016b098f4fa1f6279559f104d70f1632dtakashi <code>/foo/</code> が新しいディレクトリ <code>/bar/</code> に移動したときは、
208651a016b098f4fa1f6279559f104d70f1632dtakashi 以下のようにしてクライアントが新しい場所のコンテンツをリクエストするように
208651a016b098f4fa1f6279559f104d70f1632dtakashi 指示することができます:</p>
75429b361faff4e3109d7e5962f70d2d65271f60yoshiki<example>Redirect permanent /foo/
208651a016b098f4fa1f6279559f104d70f1632dtakashi <code>www.example.com</code> サーバの <code>/bar/</code> が
208651a016b098f4fa1f6279559f104d70f1632dtakashi サーバは自分自身のサーバだけでなく、どのサーバにでもクライアントを
208651a016b098f4fa1f6279559f104d70f1632dtakashi リダイレクトすることができます。</p>
208651a016b098f4fa1f6279559f104d70f1632dtakashi <p>Apache はより複雑な書き換えの問題のために、
208651a016b098f4fa1f6279559f104d70f1632dtakashi <directive module="mod_alias">RedirectMatch</directive> ディレクティブを
208651a016b098f4fa1f6279559f104d70f1632dtakashi 提供しています。たとえば、サイトのホームページを違うサイトにリダイレクト
208651a016b098f4fa1f6279559f104d70f1632dtakashi するけれど、他のリクエストはそのまま扱う、というときは以下の設定を
75429b361faff4e3109d7e5962f70d2d65271f60yoshiki<example>RedirectMatch permanent ^/$
208651a016b098f4fa1f6279559f104d70f1632dtakashi <p>あるいは、一時的にサイトのすべてのページを他のサイトの特定の
208651a016b098f4fa1f6279559f104d70f1632dtakashi ページへリダイレクトするときは、以下を使います:</p>
75429b361faff4e3109d7e5962f70d2d65271f60yoshiki<example>RedirectMatch temp .*
498e8a909bc308283d3713bb348246fe51de059cyoshiki http://othersite.example.com/startpage.html</example>
208651a016b098f4fa1f6279559f104d70f1632dtakashi<p>Apache は遠隔地にあるドキュメントをローカルのサーバの URL 空間に
208651a016b098f4fa1f6279559f104d70f1632dtakashiウェブサーバが遠隔地のドキュメントを取得してクライアントに送り返すのが
208651a016b098f4fa1f6279559f104d70f1632dtakashiプロキシサーバの動作のように見えるからです。クライアントにはドキュメントが
208651a016b098f4fa1f6279559f104d70f1632dtakashiリバースプロキシサーバから送られてきているように見える点が通常の
208651a016b098f4fa1f6279559f104d70f1632dtakashiプロキシとは異なります。</p>
208651a016b098f4fa1f6279559f104d70f1632dtakashiドキュメントをリクエストすると、サーバが <code>internal.example.com</code> の
208651a016b098f4fa1f6279559f104d70f1632dtakashiドキュメントのようにしてクライアントに返します。</p>
75429b361faff4e3109d7e5962f70d2d65271f60yoshikiProxyPass /foo/ http://internal.example.com/bar/<br />
18d6d78c596e3e6193fbef9cfbd33618cec13f19kawaiProxyPassReverse /foo/ http://internal.example.com/bar/<br />
18d6d78c596e3e6193fbef9cfbd33618cec13f19kawaiProxyPassReverseCookieDomain internal.example.com public.example.com<br />
18d6d78c596e3e6193fbef9cfbd33618cec13f19kawaiProxyPassReverseCookiePath /foo/ /bar/
208651a016b098f4fa1f6279559f104d70f1632dtakashi<p><directive module="mod_proxy">ProxyPass</directive> ディレクティブは
208651a016b098f4fa1f6279559f104d70f1632dtakashiサーバが適切なドキュメントを取得するように設定し、
208651a016b098f4fa1f6279559f104d70f1632dtakashi<directive module="mod_proxy">ProxyPassReverse</directive> ディレクティブは
208651a016b098f4fa1f6279559f104d70f1632dtakashi適切なディレクトリを指すように書き換えます。
208651a016b098f4fa1f6279559f104d70f1632dtakashi同様に <directive module="mod_proxy">ProxyPassReverseCookieDomain</directive>
208651a016b098f4fa1f6279559f104d70f1632dtakashiと <directive module="mod_proxy">ProxyPassReverseCookiePath</directive>
208651a016b098f4fa1f6279559f104d70f1632dtakashiでバックエンド側サーバの発行した Cookie を書き換えることができます。</p>
208651a016b098f4fa1f6279559f104d70f1632dtakashi<p>ただし、ドキュメントの中のリンクは書き換えられない、
208651a016b098f4fa1f6279559f104d70f1632dtakashiということは知っておいてください。
208651a016b098f4fa1f6279559f104d70f1632dtakashiですから、<code>internal.example.com</code> への絶対パスによるリンクでは、
208651a016b098f4fa1f6279559f104d70f1632dtakashiクライアントがプロキシサーバを抜け出して <code>internal.example.com</code> に
208651a016b098f4fa1f6279559f104d70f1632dtakashi直接リクエストを送る、ということになります。
208651a016b098f4fa1f6279559f104d70f1632dtakashiサードパーティ製モジュールの <a
18d6d78c596e3e6193fbef9cfbd33618cec13f19kawaihref="http://apache.webthing.com/mod_proxy_html/">mod_proxy_html</a>
208651a016b098f4fa1f6279559f104d70f1632dtakashiは、HTML と XHTML 中のリンクを書き換えることができます。</p>
208651a016b098f4fa1f6279559f104d70f1632dtakashi が提供するリライトエンジンが役に立つでしょう。
208651a016b098f4fa1f6279559f104d70f1632dtakashi このモジュールにより提供されるディレクティブは
208651a016b098f4fa1f6279559f104d70f1632dtakashi ブラウザの種類、リクエスト元の IP アドレスなどのリクエストの特徴を
208651a016b098f4fa1f6279559f104d70f1632dtakashi 使って送り返すコンテンツの場所を決めます。さらに、<module>mod_rewrite</module>
208651a016b098f4fa1f6279559f104d70f1632dtakashi は外部のデータベースファイルやプログラムを使ってリクエストの扱い方を
208651a016b098f4fa1f6279559f104d70f1632dtakashi 決めることもできます。リライトエンジンは上で挙げられている三つのマッピング
208651a016b098f4fa1f6279559f104d70f1632dtakashi すべてを行なうことができます: 内部のリダイレクト (エイリアス)、
208651a016b098f4fa1f6279559f104d70f1632dtakashi 外部のリダイレクト、プロキシです。mod_rewrite を使う多くの実用的な例は
208651a016b098f4fa1f6279559f104d70f1632dtakashi で説明されています。</p>
208651a016b098f4fa1f6279559f104d70f1632dtakashi <p>必ず、リクエストされた URL に対応するファイルがファイルシステムに
208651a016b098f4fa1f6279559f104d70f1632dtakashi 無いという場合が発生します。これが起こるのにはいくつかの理由があります。
208651a016b098f4fa1f6279559f104d70f1632dtakashi 場合によっては、ドキュメントを別の場所に移動した結果であることがあります。
208651a016b098f4fa1f6279559f104d70f1632dtakashi この場合は、クライアントにリソースの新しい位置を知らせるために
208651a016b098f4fa1f6279559f104d70f1632dtakashi そうすることによって、リソースは新しい位置に移動しているけれども、
208651a016b098f4fa1f6279559f104d70f1632dtakashi 古いブックマークやリンクが動作し続けるようにすることができます。</p>
208651a016b098f4fa1f6279559f104d70f1632dtakashi <p>"File Not Found" エラーのもう一つのよくある理由は、
208651a016b098f4fa1f6279559f104d70f1632dtakashi ブラウザへの直接入力や HTML リンクからの偶発的な URL の入力間違いです。
208651a016b098f4fa1f6279559f104d70f1632dtakashi モジュール (意図的な綴り間違い)
208651a016b098f4fa1f6279559f104d70f1632dtakashi (訳注: 正しくは spelling) を提供しています。このモジュールが
208651a016b098f4fa1f6279559f104d70f1632dtakashi 使用されているときは、"File Not Found" エラーを横取りして、
208651a016b098f4fa1f6279559f104d70f1632dtakashi 似たファイル名のリソースを探します。もし一つだけ見つかった場合は
208651a016b098f4fa1f6279559f104d70f1632dtakashi mod_speling はクライアントに正しい位置を知らせるために HTTP リダイレクトを
208651a016b098f4fa1f6279559f104d70f1632dtakashi 送ります。もし複数の「近い」ファイルが見つかった場合は、それら
208651a016b098f4fa1f6279559f104d70f1632dtakashi 代替となりえるもののリストがクライアントに表示されます。</p>
208651a016b098f4fa1f6279559f104d70f1632dtakashi <p>mod_speling の非常に有用な機能は、大文字小文字を区別せずに
208651a016b098f4fa1f6279559f104d70f1632dtakashi ファイル名を比較するものです。これは URL と unix の
208651a016b098f4fa1f6279559f104d70f1632dtakashi ファイルシステムが両方とも大文字小文字を区別するものである、
208651a016b098f4fa1f6279559f104d70f1632dtakashi ということをユーザが知らないシステムで役に立ちます。ただし、
208651a016b098f4fa1f6279559f104d70f1632dtakashi 時折の URL 訂正程度で済まず、mod_speling をより多く使用すると、サーバに
208651a016b098f4fa1f6279559f104d70f1632dtakashi さらなる負荷がかかります。すべての「正しくない」リクエストの後に
208651a016b098f4fa1f6279559f104d70f1632dtakashi URL のリダイレクトとクライアントからの新しいリクエストがくることに
208651a016b098f4fa1f6279559f104d70f1632dtakashi なりますから。</p>
208651a016b098f4fa1f6279559f104d70f1632dtakashi <p>コンテンツの位置を決めようとするすべての試みが失敗すると、
208651a016b098f4fa1f6279559f104d70f1632dtakashi Apache は、HTTP ステータスコード 404 (file not found) と共に
208651a016b098f4fa1f6279559f104d70f1632dtakashi エラーページを返します。このエラーページの外観は
208651a016b098f4fa1f6279559f104d70f1632dtakashi ディレクティブで制御され、
208651a016b098f4fa1f6279559f104d70f1632dtakashi 説明されているように、柔軟な設定を行なうことができます。</p>
75429b361faff4e3109d7e5962f70d2d65271f60yoshiki</manualpage>