summaryrefslogtreecommitdiff
path: root/docs/manual/howto/htaccess.xml.ja
blob: 7ec014a453bdd59bad496dd0154d15261fabfd27 (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
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE manualpage SYSTEM "../style/manualpage.dtd">
<?xml-stylesheet type="text/xsl" href="../style/manual.ja.xsl"?>
<!-- English Revision: 574882:1741842 (outdated) -->

<!--
 Licensed to the Apache Software Foundation (ASF) under one or more
 contributor license agreements.  See the NOTICE file distributed with
 this work for additional information regarding copyright ownership.
 The ASF licenses this file to You under the Apache License, Version 2.0
 (the "License"); you may not use this file except in compliance with
 the License.  You may obtain a copy of the License at

     http://www.apache.org/licenses/LICENSE-2.0

 Unless required by applicable law or agreed to in writing, software
 distributed under the License is distributed on an "AS IS" BASIS,
 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 See the License for the specific language governing permissions and
 limitations under the License.
-->

<manualpage metafile="htaccess.xml.meta">
<parentdocument href="./">How-To / チュートリアル</parentdocument>

<title>Apache チュートリアル: .htaccess ファイル</title>

<summary>
<p><code>.htaccess</code> ファイルはディレクトリ毎に設定を変更する方法を
提供します。</p>
</summary>

<section id="related"><title>.htaccess ファイル</title>
    <related>
        <modulelist>
            <module>core</module>
            <module>mod_authn_file</module>
            <module>mod_authz_groupfile</module>
            <module>mod_cgi</module>
            <module>mod_include</module>
            <module>mod_mime</module>
        </modulelist>

        <directivelist>
            <directive module="core">AccessFileName</directive>
            <directive module="core">AllowOverride</directive>
            <directive module="core">Options</directive>
            <directive module="mod_mime">AddHandler</directive>
            <directive module="core">SetHandler</directive>
            <directive module="mod_authn_core">AuthType</directive>
            <directive module="mod_authn_core">AuthName</directive>
            <directive module="mod_authn_file">AuthUserFile</directive>
            <directive module="mod_authz_groupfile">AuthGroupFile</directive>
            <directive module="mod_authz_core">Require</directive>
        </directivelist>

    </related>
</section>

<section id="what">
<title>.htaccess ファイルとは何か/その使い方</title>

    <p><code>.htaccess</code> ファイル (「分散設定ファイル」) は
    ディレクトリ毎に設定を変更する方法を提供します。ディレクティブの
    書かれたファイルをディレクトリに置くことで、そのディレクトリとその
    サブディレクトリすべてにディレクティブを適用させることができます。</p>

    <note><title>注:</title>
      <p><code>.htaccess</code> ファイルを別の名前にしたい場合は、
      <directive module="core">AccessFileName</directive> ディレクティブを
      使って変更することができます。例えば、そのファイルを <code>.config</code> 
      という名前にしたい場合は、以下の設定をサーバ設定ファイルに入れることが
      できます:</p>

      <example>
        AccessFileName .config
      </example>
    </note>

    <p>一般に、<code>.htaccess</code> ファイルの構文は
    <a href="../configuring.html#syntax">主設定ファイル</a>
    と同じです。これらのファイルに書くことのできるディレクティブは <directive
    module="core">AllowOverride</directive> ディレクティブにより決まります。
    このディレクティブは、<code>.htaccess</code> ファイルに
    書かれたディレクティブの中で、、
    どのディレクティブが適用されるかをカテゴリー単位で指定します。
    <code>.htaccess</code> に書くことのできるディレクティブであれば、
    説明文書には「上書き」という項目があり、.htaccess に書くことができるように
    なるための <directive 
    module="core">AllowOverride</directive> の値が指定されています。</p>

    <p>例えば、<directive
    module="core">AddDefaultCharset</directive> ディレクティブの説明を
    見ると、<code>.htaccess</code> ファイルでの使用が許可されていることが
    わかります。 (ディレクティブの概要の所にある「コンテキスト」と書かれている
    行を見てください。) <a
    href="../mod/directive-dict.html#Context">上書き</a>と書かれている行には
    <code>FileInfo</code> とあります。ですから、<code>.htaccess</code> 中の
    このディレクティブが有効になるためには、少なくとも
    <code>AllowOverride FileInfo</code> が設定されている必要があります。</p>

    <example><title>例:</title>
      <table>
        <tr>
          <td><a
          href="../mod/directive-dict.html#Context">コンテキスト:</a></td>
          <td>サーバ設定ファイル,バーチャルホスト,ディレクトリ,.htaccess</td>
        </tr>

        <tr>
          <td><a
          href="../mod/directive-dict.html#Override">上書き:</a></td>
          <td>FileInfo</td>
        </tr>
      </table>
    </example>

    <p>あるディレクティブを <code>.htaccess</code> ファイルに書くことができるか
    どうかわからないときは、そのディレクティブの説明を探して、".htaccess"
    のための「コンテキスト」の行を調べてください。</p>
    </section>

    <section id="when"><title>いつ .htaccess ファイルを使う(使わない)か。</title>

    <p>一般的に、サーバの主設定ファイルにアクセスできない場合を除いて、
    <code>.htaccess</code> ファイルの使用は極力避けてください。
    世の中には、例えば、ユーザ認証は常に <code>.htaccess</code> ファイルで
    行なわなければならない、という誤解が広まっていますが、まったくそんなことは
    ありません。ユーザ認証の設定はサーバ主設定ファイルに書くことができ、
    実際、その方がより良い設定方法です。</p>

    <p><code>.htaccess</code> ファイルはコンテンツ提供者がディレクトリ毎の
    設定を行ないたいけれど、サーバシステムの root アクセス権限を持っていない
    という場合にのみ使うべきものです。サーバ管理者が頻繁に設定変更を行ないたくは
    ない、というときには個々のユーザが <code>.htaccess</code> ファイルを使って
    自分で設定の変更を行なうことを許可した方が良いときもあるでしょう。
    これは特に、ISP が複数のユーザのサイトを一つのマシンでホストしていて、
    各ユーザが設定の変更をできるようにしたいようなときにあてはまります。</p>

    <p>しかし、普通は可能であれば <code>.htaccess</code> ファイルの使用は
    避けてください。<code>.htaccess</code> ファイルに書こうと考えるような
    すべての設定は、サーバの主設定ファイルの <directive module="core"
    type="section">Directory</directive> セクションで同じように行なうことが
    できます。</p>

    <p><code>.htaccess</code> ファイルの使用を避ける理由は主に二つあります。</p>

    <p>一つ目はサーバの性能の問題です。<directive 
    module="core">AllowOverride</directive> ディレクティブが
    <code>.htaccess</code> ファイルの設定を許可している場合は、Apache は
    各ディレクトリで <code>.htaccess</code> ファイルを探します。
    ですから、<code>.htaccess</code> ファイルを許可すると、実際に使用しているか
    どうかに関わらず、性能の低下を招くことになります! また、<code>.htaccess</code>
    ファイルは文書がリクエストされる度に読み込まれます。</p>

    <p>さらに、Apache は適用すべきディレクティブを集めるために、すべての
    上位のディレクトリの <code>.htaccess</code> ファイルを探す必要があることにも
    注意してください。(<a href="#how">ディレクティブが適用される方法</a>を
    参照してください。)ですから、<code>/www/htdocs/example</code> にある
    ファイルがリクエストされたときは、Apache は以下のファイルを調べます。</p>

    <example>
      /.htaccess<br />
      /www/.htaccess<br />
      /www/htdocs/.htaccess<br />
      /www/htdocs/example/.htaccess
    </example>

    <p>ですから、そのディレクトリのそれぞれのファイルへのアクセスに対して、
    上の例のファイルがまったく存在しないときでも、追加のファイルシステムの
    アクセスが行なわれることになります。(これは、<code>.htaccess</code> が
    <code>/</code> に対して有効になっているときの場合で、普通はそうなって
    いないことに注意してください。)</p>

    <p>二つ目はセキュリティです。ユーザにサーバの設定を変更することを
    許可することになりますので、あなた自身が管理できない変更をされる
    恐れがあります。ユーザにこの特権を与えるのが良いのかどうか、十分
    検討してください。また、ユーザに与える権限が必要なものよりも少なすぎると、
    余分な技術サポート報告を受け取るようになる可能性が高いことにも
    注意してください。確実に、ユーザにどの程度の権限を与えたか明確に告げるように
    してください。<directive module="core">AllowOverride</directive> に
    何を設定したかということと、関連する文書を示すことで、
    後々の混乱をぐっと減らすことが
    できます。</p>

    <p>ところで、ディレクティブの書かれた <code>.htaccess</code> を
    <code>/www/htdocs/example</code> に置くことと、同じディレクティブを
    主サーバ設定の Directory セクション
    <code>&lt;Directory /www/htdocs/example&gt;</code> に書くことは
    完全に等価です:</p>

    <p><code>/www/htdocs/example</code> の <code>.htaccess</code> ファイル:</p>

    <example><title><code>/www/htdocs/example</code> の .htaccess ファイルの
    内容</title>
        AddType text/example .exm
    </example>

    <example><title><code>httpd.conf のセクション</code>
    file</title>
      &lt;Directory /www/htdocs/example&gt;<br />
      <indent>
        AddType text/example .exm<br />
      </indent>
      &lt;/Directory&gt;
    </example>

    <p>しかし、この設定はサーバ設定ファイルに書いた方がパフォーマンスの
    低下が少なくなります。ファイルがリクエストされる度に
    読み込まれる代わりに、Apache の起動時に 1 回だけ読み込めば
    よくなるからです。</p>

    <p><directive module="core">AllowOverride</directive> ディレクティブの
    値を <code>none</code> に設定することで <code>.htaccess</code> ファイル
    の使用を完全に無効にすることができます。</p>

    <example>
      AllowOverride None
    </example>
</section>

<section id="how"><title>ディレクティブの適用のされ方</title>

    <p><code>.htaccess</code> ファイルの設定ディレクティブは <code>.htaccess</code>
    ファイルの存在するディレクトリと、そのサブディレクトリすべてに適用されます。
    しかし、上の階層のディレクトリにも <code>.htaccess</code> ファイルが
    存在するかもしれないことを覚えておくことは大切です。ディレクティブは現れる
    順番に適用されます。ですから、あるディレクトリの <code>.htaccess</code> は
    ディレクトリツリーのより上の階層の <code>.htaccess</code> ファイルの
    設定を上書きするかもしれません。そして、その <code>.htaccess</code> も
    より上の階層で書かれたディレクティブを上書きしたり、主サーバ設定ファイル
    そのものの設定を上書きしたりしているかもしれません。</p>

    <p>例:</p>

    <p>ディレクトリ <code>/www/htdocs/example1</code> に以下の内容の
    <code>.htaccess</code> ファイルがあります:</p>

    <example>
       Options +ExecCGI
    </example>

    <p>(注: <code>.htaccess</code>
    ファイルで "<directive
    module="core">Options</directive>" ディレクティブが有効になるためには、
    "<code>AllowOverride Options</code>" を有効にする必要があります。)</p>

    <p>ディレクトリ <code>/www/htdocs/example1/example2</code> には
    以下のような <code>.htaccess</code> ファイルがあります:</p>

    <example>
       Options Includes
    </example>

    <p>二つめの <code>.htaccess</code> により、ディレクトリ
    <code>/www/htdocs/example1/example2</code> では CGI の実行は
    許可されません。これは、<code>Options Includes</code> のみが
    効力を持ち、それがすべての以前の設定を上書きするからです。</p>

    <section id="merge"><title>メイン設定ファイルに対する
    .htaccess のマージ</title>

    <p>As discussed in the documentation on <a
    href="../sections.html">Configuration Sections</a>,
    <code>.htaccess</code> files can override the <directive
    type="section" module="core">Directory</directive> sections for
    the corresponding directory, but will be overriden by other types
    of configuration sections from the main configuration files.  This
    fact can be used to enforce certain configurations, even in the
    presence of a liberal <directive
    module="core">AllowOverride</directive> setting.  For example, to
    prevent script execution while allowing anything else to be set in
    <code>.htaccess</code> you can use:</p>
    <p><a href="../sections.html">セクションの設定</a>
    に記載されているように、<code>.htaccess</code> ファイルを使って
    <directive type="section" module="core">Directory</directive>
    セクションの設定をディレクトリ毎に上書きできますが、
    メイン設定ファイル中にある、他の種類の設定セクションによって
    さらに上書きされることもあります。
    この特徴を使って、
    <directive module="core">AllowOverride</directive>
    で自由度の高い設定があったとしても、ある特定の設定が確実に
    反映されるようにできます。例えば、CGI スクリプトの実行は
    不許可に、かつ、<code>.htaccess</code> でその他の項目は
    設定できるように、という場合は次のようにできます :</p>
    
    <example>
&lt;Directory /&gt;<br />
<indent>
Allowoverride All<br />
</indent>
&lt;/Directory&gt;<br />
<br />
&lt;Location /&gt;<br />
<indent>
Options +IncludesNoExec -ExecCGI<br />
</indent>
&lt;/Location&gt;
    </example>
</section>

</section>

<section id="auth"><title>認証の例</title>

    <p>もし認証の方法を知るためにこの部分に直接来たのであれば、次のことを
    知っておくことが重要です。よくある誤解に、パスワード認証を行なうためには
    <code>.htaccess</code> ファイルを使う必要がある、というものがあります。
    これは正しくありません。主サーバ設定ファイルの <directive
    module="core" type="section">Directory</directive> セクションに
    認証用のディレクティブを書く方が推奨される方法で、<code>.htaccess</code>
    ファイルは主サーバ設定ファイルを変更できないときにのみ使用すべきです。
    いつ <code>.htaccess</code> ファイルを使うべきで、いつ使うべきではないかに
    ついては <a 
    href="#when">上</a>を参照してください。</p>

    <p>以上のことをふまえた上で、もし <code>.htaccess</code> の使用が
    まだ必要だと思う場合は、次のようなものが望みのことをしてくれるかも
    しれません。</p>

    <p><code>.htaccess</code> ファイルの内容:</p>

    <example>
      AuthType Basic<br />
      AuthName "Password Required"<br />
      AuthUserFile /www/passwords/password.file<br />
      AuthGroupFile /www/passwords/group.file<br />
      Require Group admins
    </example>

    <p>これらのディレクティブが有効になるためには、
    <code>AllowOverride AuthConfig</code> が有効でなくてはならないことに
    注意してください。</p>

    <p>認証と承認については <a href="auth.html">認証チュートリアル</a>を
    参照してください。</p>
</section>

<section id="ssi"><title>SSI の例</title>

    <p>もう一つの <code>.htaccess</code> ファイルのよくある利用法は
    特定のディレクトリで SSI を有効にすることです。これは、望みのディレクトリの
    <code>.htaccess</code> ファイルに以下の設定ディレクティブを書くことで
    達成できます:</p>

    <example>
       Options +Includes<br />
       AddType text/html shtml<br />
       AddHandler server-parsed shtml
    </example>

    <p>これらのディレクティブが有効になるためには、
    <code>AllowOverride Options</code> と <code>AllowOverride
    FileInfo</code> が有効になっている必要があることに注意してください。</p>

    <p>よりまとまった SSI の説明は <a href="ssi.html">SSI チュートリアル</a>を
    参照してください。</p>
</section>

<section id="cgi"><title>CGI の例</title>

    <p>最後に、特定のディレクトリで CGI プログラムの実行を許可したいことが
    あるでしょう。これは以下の設定で行なうことができます:</p>

    <example>
       Options +ExecCGI<br />
       AddHandler cgi-script cgi pl
    </example>

    <p>もしくは、あるディレクトリのすべてのファイルが CGI プログラムと
    みなされるようにしたいなら、以下の設定で実現することができます:</p>

    <example>
       Options +ExecCGI<br />
       SetHandler cgi-script
    </example>

    <p>これらのディレクティブが有効になるためには、
    <code>AllowOverride Options</code> と <code>AllowOverride
    FileInfo</code> が有効である必要があることに注意してください。</p>

    <p>CGI プログラムと設定のよりまとまった説明は <a
    href="cgi.html">CGI チュートリアル</a>を参照してください。</p>

</section>

<section id="troubleshoot"><title>問題解決</title>

    <p>設定ディレクティブを <code>.htaccess</code> ファイルに書いたけれども、
    期待した効果が得られないときには、いくつかの原因が考えられます。</p>

    <p>一番よくあることは、設定ディレクティブが考慮されるようには
    <directive module="core">AllowOverride</directive> が設定されていない
    というものです。該当のファイルのスコープに <code>AllowOverride None</code>
    が設定されていないことを確認してください。これを調べるための良い方法は、
    <code>.htaccess</code> ファイルにごみを書いて、リロードすることです。
    サーバのエラーが生成されないときは、ほぼ確実に <code>AllowOverride
    None</code> が設定されている状態になっています。</p>

    <p>そうではなく、文書をアクセスしようとしたときにエラーが発生している
    ときは、Apache のエラーログを調べてください。<code>.htaccess</code> ファイルで
    使用されたディレクティブが許可されていない、ということを知らせている
    可能性が高いです。または、構文の間違いがあることを述べているかもしれません。
    その場合にはまずそれを修正する必要があります。</p>

</section>

</manualpage>