blob: 2f9c9c693d64d146ee1130d527c15aca2098fff0 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
|
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja"><head><!--
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
This file is generated from xml source: DO NOT EDIT
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
-->
<title>URL からファイルシステム上の位置へのマップ - Apache HTTP サーバ</title>
<link href="./style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
<link href="./style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
<link href="./style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
<link href="./images/favicon.ico" rel="shortcut icon" /></head>
<body id="manual-page"><div id="page-header">
<p class="menu"><a href="./mod/">モジュール</a> | <a href="./mod/directives.html">ディレクティブ</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">用語</a> | <a href="./sitemap.html">サイトマップ</a></p>
<p class="apache">Apache HTTP サーバ バージョン 2.2</p>
<img alt="" src="./images/feather.gif" /></div>
<div class="up"><a href="./"><img title="<-" alt="<-" src="./images/left.gif" /></a></div>
<div id="path">
<a href="http://www.apache.org/">Apache</a> > <a href="http://httpd.apache.org/">HTTP サーバ</a> > <a href="http://httpd.apache.org/docs/">ドキュメンテーション</a> > <a href="./">バージョン 2.2</a></div><div id="page-content"><div id="preamble"><h1>URL からファイルシステム上の位置へのマップ</h1>
<div class="toplang">
<p><span>翻訳済み言語: </span><a href="./en/urlmapping.html" hreflang="en" rel="alternate" title="English"> en </a> |
<a href="./ja/urlmapping.html" title="Japanese"> ja </a> |
<a href="./ko/urlmapping.html" hreflang="ko" rel="alternate" title="Korean"> ko </a> |
<a href="./tr/urlmapping.html" hreflang="tr" rel="alternate" title="Türkçe"> tr </a></p>
</div>
<div class="outofdate">この日本語訳はすでに古くなっている
可能性があります。
最近更新された内容を見るには英語版をご覧下さい。
</div>
<p>この文書は Apache がリクエストの URL から送信するファイルの
ファイルシステム上の位置を決定する方法を説明します。</p>
</div>
<div id="quickview"><ul id="toc"><li><img alt="" src="./images/down.gif" /> <a href="#related">関連するモジュールとディレクティブ</a></li>
<li><img alt="" src="./images/down.gif" /> <a href="#documentroot">DocumentRoot</a></li>
<li><img alt="" src="./images/down.gif" /> <a href="#outside">DocumentRoot 外のファイル</a></li>
<li><img alt="" src="./images/down.gif" /> <a href="#user">ユーザディレクトリ</a></li>
<li><img alt="" src="./images/down.gif" /> <a href="#redirect">URL リダイレクション</a></li>
<li><img alt="" src="./images/down.gif" /> <a href="#proxy">リバースプロキシ</a></li>
<li><img alt="" src="./images/down.gif" /> <a href="#rewrite">リライトエンジン</a></li>
<li><img alt="" src="./images/down.gif" /> <a href="#notfound">File Not Found</a></li>
</ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
<div class="section">
<h2><a name="related" id="related">関連するモジュールとディレクティブ</a></h2>
<table class="related"><tr><th>関連モジュール</th><th>関連ディレクティブ</th></tr><tr><td><ul><li><code class="module"><a href="./mod/mod_alias.html">mod_alias</a></code></li><li><code class="module"><a href="./mod/mod_proxy.html">mod_proxy</a></code></li><li><code class="module"><a href="./mod/mod_rewrite.html">mod_rewrite</a></code></li><li><code class="module"><a href="./mod/mod_userdir.html">mod_userdir</a></code></li><li><code class="module"><a href="./mod/mod_speling.html">mod_speling</a></code></li><li><code class="module"><a href="./mod/mod_vhost_alias.html">mod_vhost_alias</a></code></li></ul></td><td><ul><li><code class="directive"><a href="./mod/mod_alias.html#alias">Alias</a></code></li><li><code class="directive"><a href="./mod/mod_alias.html#aliasmatch">AliasMatch</a></code></li><li><code class="directive"><a href="./mod/mod_speling.html#checkspelling">CheckSpelling</a></code></li><li><code class="directive"><a href="./mod/core.html#documentroot">DocumentRoot</a></code></li><li><code class="directive"><a href="./mod/core.html#errordocument">ErrorDocument</a></code></li><li><code class="directive"><a href="./mod/core.html#options">Options</a></code></li><li><code class="directive"><a href="./mod/mod_proxy.html#proxypass">ProxyPass</a></code></li><li><code class="directive"><a href="./mod/mod_proxy.html#proxypassreverse">ProxyPassReverse</a></code></li><li><code class="directive"><a href="./mod/mod_proxy.html#proxypassreversecookiedomain">ProxyPassReverseCookieDomain</a></code></li><li><code class="directive"><a href="./mod/mod_proxy.html#proxypassreversecookiepath">ProxyPassReverseCookiePath</a></code></li><li><code class="directive"><a href="./mod/mod_alias.html#redirect">Redirect</a></code></li><li><code class="directive"><a href="./mod/mod_alias.html#redirectmatch">RedirectMatch</a></code></li><li><code class="directive"><a href="./mod/mod_rewrite.html#rewritecond">RewriteCond</a></code></li><li><code class="directive"><a href="./mod/mod_rewrite.html#rewritematch">RewriteMatch</a></code></li><li><code class="directive"><a href="./mod/mod_alias.html#scriptalias">ScriptAlias</a></code></li><li><code class="directive"><a href="./mod/mod_alias.html#scriptaliasmatch">ScriptAliasMatch</a></code></li><li><code class="directive"><a href="./mod/mod_userdir.html#userdir">UserDir</a></code></li></ul></td></tr></table>
</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
<div class="section">
<h2><a name="documentroot" id="documentroot">DocumentRoot</a></h2>
<p>リクエストに対してどのファイルを送信するかを決定するときの
Apache のデフォルトの動作は、リクエストの URL-Path (URL のホスト名と
ポート番号の後に続く部分) を取り出して設定ファイルで指定されている
<code class="directive"><a href="./mod/core.html#documentroot">DocumentRoot</a></code>
の最後に追加する、というものです。ですから、
<code class="directive"><a href="./mod/core.html#documentroot">DocumentRoot</a></code>
の下のディレクトリやファイルがウェブから見える基本のドキュメントの木構造を
なします。</p>
<p>Apache にはサーバが複数のホストへのリクエストを受け取る
<a href="vhosts/">バーチャルホスト</a> の機能もあります。
この場合、それぞれのバーチャルホストに対して違う
<code class="directive"><a href="./mod/core.html#documentroot">DocumentRoot</a></code>
を指定することができます。また、<code class="module"><a href="./mod/mod_vhost_alias.html">mod_vhost_alias</a></code>
モジュールにより提供されるディレクティブを使って、
送信するためのコンテンツの場所をリクエストされた IP
アドレスやホスト名から動的に決めることもできます。</p>
</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
<div class="section">
<h2><a name="outside" id="outside">DocumentRoot 外のファイル</a></h2>
<p>ファイルシステム上の、
厳密には <code class="directive"><a href="./mod/core.html#documentroot">DocumentRoot</a></code>
の下にはない部分へのウェブアクセスを許可する必要がある
場合がよくあります。Apache はこのために複数の方法を用意しています。
Unix システムでは、ファイルシステムの他の部分をシンボリックリンクを
使って <code class="directive"><a href="./mod/core.html#documentroot">DocumentRoot</a></code>
の下に持ってくることができます。セキュリティ上の理由により、
Apache は該当するディレクトリの
<code class="directive"><a href="./mod/core.html#options">Options</a></code> の設定に
<code>FollowSymLinks</code> か <code>SymLinksIfOwnerMatch</code> が
ある場合にのみシンボリックリンクをたどります。</p>
<p>代わりの方法として、<code class="directive"><a href="./mod/mod_alias.html#alias">Alias</a></code>
ディレクティブを使ってファイルシステムの任意の部分をウェブの空間に
マップできます。たとえば、</p>
<div class="example"><p><code>Alias /docs /var/web</code></p></div>
<p>という設定のときは、URL
<code>http://www.example.com/docs/dir/file.html</code> には
<code>/var/web/dir/file.html</code> が送信されます。
<code class="directive"><a href="./mod/mod_alias.html#scriptalias">ScriptAlias</a></code> も、
対象となっているパスが <a class="glossarylink" href="./glossary.html#cgi" title="用語集を参照">CGI</a>
スクリプトとして扱われるという追加の
効果以外は同じように動作します。</p>
<p>もっと柔軟な設定が必要な状況では、
<code class="directive"><a href="./mod/mod_alias.html#aliasmatch">AliasMatch</a></code> ディレクティブや
<code class="directive"><a href="./mod/mod_alias.html#scriptaliasmatch">ScriptAliasMatch</a></code> ディレクティブ
を使って強力な<a class="glossarylink" href="./glossary.html#regex" title="用語集を参照">正規表現</a>に基づいたマッチと
置換を行なうことができます。
たとえば、</p>
<div class="example"><p><code>ScriptAliasMatch ^/~([a-zA-Z0-9]+)/cgi-bin/(.+)
/home/$1/cgi-bin/$2</code></p></div>
<p>は <code>http://example.com/~user/cgi-bin/script.cgi</code> への
リクエストを <code>/home/user/cgi-bin/script.cgi</code> というパスへ
マップし、このマップの結果としてのファイルを CGI スクリプトとして
扱います。</p>
</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
<div class="section">
<h2><a name="user" id="user">ユーザディレクトリ</a></h2>
<p>伝統的に Unix システムではユーザ <em>user</em> のホームディレクトリを
<code>~user/</code> として参照できます。<code class="module"><a href="./mod/mod_userdir.html">mod_userdir</a></code>
モジュールはこの概念をウェブに拡張して、
それぞれのユーザのホームディレクトリのファイルを
以下のような URL を使ってアクセスできるようにします。</p>
<div class="example"><p><code>http://www.example.com/~user/file.html</code></p></div>
<p>セキュリティの観点から、ウェブからユーザのホームディレクトリへ
直接アクセスできるようにすることは適切ではありません。ですから、
<code class="directive"><a href="./mod/mod_userdir.html#userdir">UserDir</a></code> ディレクティブには
ユーザのホームディレクトリの下の、ウェブファイルの
置かれているディレクトリを指定します。デフォルトの設定の
<code>Userdir public_html</code> を使うと、上の URL は
<code>/home/user/public_html/file.html</code> というようなファイルに
マップされます。ここで、<code>/home/user/</code> は
<code>/etc/passwd</code> で指定されているユーザのホームディレクトリです。</p>
<p><code class="directive"><a href="./mod/mod_userdir.html#userdir">Userdir</a></code> には、
<code>/etc/passwd</code> にホームディレクトリの位置が書かれていない
システムでも使うことのできる他の形式もあります。</p>
<p>中にはシンボル "~" (<code>%7e</code> のように符号化されることが多い)
を格好が悪いと思って、ユーザのディレクトリを表すために別の文字列の
使用を好む人がいます。mod_userdir はこの機能をサポートしていません。
しかし、ユーザのホームディレクトリが規則的な構成のときは、
<code class="directive"><a href="./mod/mod_alias.html#aliasmatch">AliasMatch</a></code> を使って望みの
効果を達成することができます。たとえば、
<code>http://www.example.com/upages/user/file.html</code> が
<code>/home/user/public_html/file.html</code> にマップされるようにするには、
以下のように <code>AliasMatch</code> ディレクティブを使います:</p>
<div class="example"><p><code>AliasMatch ^/upages/([a-zA-Z0-9]+)/?(.*)
/home/$1/public_html/$2</code></p></div>
</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
<div class="section">
<h2><a name="redirect" id="redirect">URL リダイレクション</a></h2>
<p>上の節で説明した設定用のディレクティブは Apache に
ファイルシステムの特定の場所からコンテンツを取ってきて
クライアントに送り返すようにします。ときには、その代わりに
クライアントにリクエストされたコンテンツは別の URL にあることを
知らせて、クライアントが新しい URL へ新しいリクエストを行なうように
する方が望ましいことがあります。これは<em>リダイレクション</em>と
呼ばれていて、<code class="directive"><a href="./mod/mod_alias.html#redirect">Redirect</a></code>
ディレクティブにより実装されています。たとえば、
<code class="directive"><a href="./mod/core.html#documentroot">DocumentRoot</a></code> の下のディレクトリ
<code>/foo/</code> が新しいディレクトリ <code>/bar/</code> に移動したときは、
以下のようにしてクライアントが新しい場所のコンテンツをリクエストするように
指示することができます:</p>
<div class="example"><p><code>Redirect permanent /foo/
http://www.example.com/bar/</code></p></div>
<p>これは、<code>/foo/</code> で始まるすべての URL-Path を、
<code>www.example.com</code> サーバの <code>/bar/</code> が
<code>/foo/</code> に置換されたものにリダイレクトします。
サーバは自分自身のサーバだけでなく、どのサーバにでもクライアントを
リダイレクトすることができます。</p>
<p>Apache はより複雑な書き換えの問題のために、
<code class="directive"><a href="./mod/mod_alias.html#redirectmatch">RedirectMatch</a></code> ディレクティブを
提供しています。たとえば、サイトのホームページを違うサイトにリダイレクト
するけれど、他のリクエストはそのまま扱う、というときは以下の設定を
使います:</p>
<div class="example"><p><code>RedirectMatch permanent ^/$
http://www.example.com/startpage.html</code></p></div>
<p>あるいは、一時的にサイトのすべてのページを他のサイトの特定の
ページへリダイレクトするときは、以下を使います:</p>
<div class="example"><p><code>RedirectMatch temp .*
http://othersite.example.com/startpage.html</code></p></div>
</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
<div class="section">
<h2><a name="proxy" id="proxy">リバースプロキシ</a></h2>
<p>Apache は遠隔地にあるドキュメントをローカルのサーバの URL 空間に
持ってくることもできます。この手法は<em>リバースプロキシ</em>と呼ばれています。
ウェブサーバが遠隔地のドキュメントを取得してクライアントに送り返すのが
プロキシサーバの動作のように見えるからです。クライアントにはドキュメントが
リバースプロキシサーバから送られてきているように見える点が通常の
プロキシとは異なります。</p>
<p>次の例では、クライアントが <code>/foo/</code> ディレクトリの下にある
ドキュメントをリクエストすると、サーバが <code>internal.example.com</code> の
<code>/bar/</code> ディレクトリから取得して、さもローカルサーバからの
ドキュメントのようにしてクライアントに返します。</p>
<div class="example"><p><code>
ProxyPass /foo/ http://internal.example.com/bar/<br />
ProxyPassReverse /foo/ http://internal.example.com/bar/<br />
ProxyPassReverseCookieDomain internal.example.com public.example.com<br />
ProxyPassReverseCookiePath /foo/ /bar/
</code></p></div>
<p><code class="directive"><a href="./mod/mod_proxy.html#proxypass">ProxyPass</a></code> ディレクティブは
サーバが適切なドキュメントを取得するように設定し、
<code class="directive"><a href="./mod/mod_proxy.html#proxypassreverse">ProxyPassReverse</a></code> ディレクティブは
<code>internal.example.com</code> からのリダイレクトがローカルサーバの
適切なディレクトリを指すように書き換えます。
同様に <code class="directive"><a href="./mod/mod_proxy.html#proxypassreversecookiedomain">ProxyPassReverseCookieDomain</a></code>
と <code class="directive"><a href="./mod/mod_proxy.html#proxypassreversecookiepath">ProxyPassReverseCookiePath</a></code>
でバックエンド側サーバの発行した Cookie を書き換えることができます。</p>
<p>ただし、ドキュメントの中のリンクは書き換えられない、
ということは知っておいてください。
ですから、<code>internal.example.com</code> への絶対パスによるリンクでは、
クライアントがプロキシサーバを抜け出して <code>internal.example.com</code> に
直接リクエストを送る、ということになります。
サードパーティ製モジュールの <a href="http://apache.webthing.com/mod_proxy_html/">mod_proxy_html</a>
は、HTML と XHTML 中のリンクを書き換えることができます。</p>
</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
<div class="section">
<h2><a name="rewrite" id="rewrite">リライトエンジン</a></h2>
<p>より一層強力な置換が必要なときは、<code class="module"><a href="./mod/mod_rewrite.html">mod_rewrite</a></code>
が提供するリライトエンジンが役に立つでしょう。
このモジュールにより提供されるディレクティブは
ブラウザの種類、リクエスト元の IP アドレスなどのリクエストの特徴を
使って送り返すコンテンツの場所を決めます。さらに、<code class="module"><a href="./mod/mod_rewrite.html">mod_rewrite</a></code>
は外部のデータベースファイルやプログラムを使ってリクエストの扱い方を
決めることもできます。リライトエンジンは上で挙げられている三つのマッピング
すべてを行なうことができます: 内部のリダイレクト (エイリアス)、
外部のリダイレクト、プロキシです。mod_rewrite を使う多くの実用的な例は
<a href="misc/rewriteguide.html">URL リライトガイド</a>
で説明されています。</p>
</div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
<div class="section">
<h2><a name="notfound" id="notfound">File Not Found</a></h2>
<p>必ず、リクエストされた URL に対応するファイルがファイルシステムに
無いという場合が発生します。これが起こるのにはいくつかの理由があります。
場合によっては、ドキュメントを別の場所に移動した結果であることがあります。
この場合は、クライアントにリソースの新しい位置を知らせるために
<a href="#redirect">URL リダイレクション</a>を使うのが最善の方法です。
そうすることによって、リソースは新しい位置に移動しているけれども、
古いブックマークやリンクが動作し続けるようにすることができます。</p>
<p>"File Not Found" エラーのもう一つのよくある理由は、
ブラウザへの直接入力や HTML リンクからの偶発的な URL の入力間違いです。
Apache はこの問題を改善するために、<code class="module"><a href="./mod/mod_speling.html">mod_speling</a></code>
モジュール (意図的な綴り間違い)
(訳注: 正しくは spelling) を提供しています。このモジュールが
使用されているときは、"File Not Found" エラーを横取りして、
似たファイル名のリソースを探します。もし一つだけ見つかった場合は
mod_speling はクライアントに正しい位置を知らせるために HTTP リダイレクトを
送ります。もし複数の「近い」ファイルが見つかった場合は、それら
代替となりえるもののリストがクライアントに表示されます。</p>
<p>mod_speling の非常に有用な機能は、大文字小文字を区別せずに
ファイル名を比較するものです。これは URL と unix の
ファイルシステムが両方とも大文字小文字を区別するものである、
ということをユーザが知らないシステムで役に立ちます。ただし、
時折の URL 訂正程度で済まず、mod_speling をより多く使用すると、サーバに
さらなる負荷がかかります。すべての「正しくない」リクエストの後に
URL のリダイレクトとクライアントからの新しいリクエストがくることに
なりますから。</p>
<p>コンテンツの位置を決めようとするすべての試みが失敗すると、
Apache は、HTTP ステータスコード 404 (file not found) と共に
エラーページを返します。このエラーページの外観は
<code class="directive"><a href="./mod/core.html#errordocument">ErrorDocument</a></code>
ディレクティブで制御され、
<a href="custom-error.html">カスタムエラーレスポンス</a> で
説明されているように、柔軟な設定を行なうことができます。</p>
</div></div>
<div class="bottomlang">
<p><span>翻訳済み言語: </span><a href="./en/urlmapping.html" hreflang="en" rel="alternate" title="English"> en </a> |
<a href="./ja/urlmapping.html" title="Japanese"> ja </a> |
<a href="./ko/urlmapping.html" hreflang="ko" rel="alternate" title="Korean"> ko </a> |
<a href="./tr/urlmapping.html" hreflang="tr" rel="alternate" title="Türkçe"> tr </a></p>
</div><div id="footer">
<p class="apache">Copyright 2012 The Apache Software Foundation.<br />この文書は <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a> のライセンスで提供されています。.</p>
<p class="menu"><a href="./mod/">モジュール</a> | <a href="./mod/directives.html">ディレクティブ</a> | <a href="./faq/">FAQ</a> | <a href="./glossary.html">用語</a> | <a href="./sitemap.html">サイトマップ</a></p></div>
</body></html>
|