blob: a660ad55e074c7b8ad3cb70db973848ac20e0633 [file] [log] [blame]
<?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>
<meta content="text/html; charset=UTF-8" http-equiv="Content-Type" />
<meta content="noindex, nofollow" name="robots" />
<!--
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
This file is generated from xml source: DO NOT EDIT
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
-->
<title>Apache チュートリアル: .htaccess ファイル - 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" /><link href="http://httpd.apache.org/docs/current/howto/htaccess.html" rel="canonical" /></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.0</p>
<img alt="" src="../images/feather.gif" /></div>
<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
<div id="path">
<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP サーバ</a> &gt; <a href="http://httpd.apache.org/docs/">ドキュメンテーション</a> &gt; <a href="../">バージョン 2.0</a> &gt; <a href="./">How-To / チュートリアル</a></div><div id="page-content"><div class="retired"><h4>Please note</h4>
<p>This document refers to the <strong>2.0</strong> version of Apache httpd, which <strong>is no longer maintained</strong>. Upgrade, and refer to the current version of httpd instead, documented at:</p>
<ul><li><a href="http://httpd.apache.org/docs/current/">Current release version of Apache HTTP Server documentation</a></li></ul><p>You may follow <a href="http://httpd.apache.org/docs/current/howto/htaccess.html">this link</a> to go to the current version of this document.</p></div><div id="preamble"><h1>Apache チュートリアル: .htaccess ファイル</h1>
<div class="toplang">
<p><span>翻訳済み言語: </span><a href="../en/howto/htaccess.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
<a href="../ja/howto/htaccess.html" title="Japanese">&nbsp;ja&nbsp;</a> |
<a href="../ko/howto/htaccess.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
</div>
<div class="outofdate">この日本語訳はすでに古くなっている
可能性があります。
最近更新された内容を見るには英語版をご覧下さい。
</div>
<p><code>.htaccess</code> ファイルはディレクトリ毎に設定を変更する方法を
提供します。</p>
</div>
<div id="quickview"><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#related">.htaccess ファイル</a></li>
<li><img alt="" src="../images/down.gif" /> <a href="#what">.htaccess ファイルとは何か/その使い方</a></li>
<li><img alt="" src="../images/down.gif" /> <a href="#when">いつ .htaccess ファイルを使う(使わない)か。</a></li>
<li><img alt="" src="../images/down.gif" /> <a href="#how">ディレクティブの適用のされ方</a></li>
<li><img alt="" src="../images/down.gif" /> <a href="#auth">認証の例</a></li>
<li><img alt="" src="../images/down.gif" /> <a href="#ssi">SSI の例</a></li>
<li><img alt="" src="../images/down.gif" /> <a href="#cgi">CGI の例</a></li>
<li><img alt="" src="../images/down.gif" /> <a href="#troubleshoot">問題解決</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">.htaccess ファイル</a></h2>
<table class="related"><tr><th>関連モジュール</th><th>関連ディレクティブ</th></tr><tr><td><ul><li><code class="module"><a href="../mod/core.html">core</a></code></li><li><code class="module"><a href="../mod/mod_auth.html">mod_auth</a></code></li><li><code class="module"><a href="../mod/mod_cgi.html">mod_cgi</a></code></li><li><code class="module"><a href="../mod/mod_include.html">mod_include</a></code></li><li><code class="module"><a href="../mod/mod_mime.html">mod_mime</a></code></li></ul></td><td><ul><li><code class="directive"><a href="../mod/core.html#accessfilename">AccessFileName</a></code></li><li><code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</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_mime.html#addhandler">AddHandler</a></code></li><li><code class="directive"><a href="../mod/core.html#sethandler">SetHandler</a></code></li><li><code class="directive"><a href="../mod/core.html#authtype">AuthType</a></code></li><li><code class="directive"><a href="../mod/core.html#authname">AuthName</a></code></li><li><code class="directive"><a href="../mod/mod_auth.html#authuserfile">AuthUserFile</a></code></li><li><code class="directive"><a href="../mod/mod_auth.html#authgroupfile">AuthGroupFile</a></code></li><li><code class="directive"><a href="../mod/core.html#require">Require</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="what" id="what">.htaccess ファイルとは何か/その使い方</a></h2>
<p><code>.htaccess</code> ファイル (「分散設定ファイル」) は
ディレクトリ毎に設定を変更する方法を提供します。ディレクティブの
書かれたファイルをディレクトリに置くことで、そのディレクトリとその
サブディレクトリすべてにディレクティブを適用させることができます。</p>
<div class="note"><h3>注:</h3>
<p><code>.htaccess</code> ファイルを別の名前にしたい場合は、
<code class="directive"><a href="../mod/core.html#accessfilename">AccessFileName</a></code> ディレクティブを
使って変更することができます。例えば、そのファイルを <code>.config</code>
という名前にしたい場合は、以下の設定をサーバ設定ファイルに入れることが
できます:</p>
<div class="example"><p><code>
AccessFileName .config
</code></p></div>
</div>
<p>一般に、<code>.htaccess</code> ファイルの構文は
<a href="../configuring.html#syntax">主設定ファイル</a>
と同じです。これらのファイルに書くことのできるディレクティブは <code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code> ディレクティブにより決まります。
このディレクティブは、<code>.htaccess</code> ファイルに
書かれたディレクティブの中で、、
どのディレクティブが適用されるかをカテゴリー単位で指定します。
<code>.htaccess</code> に書くことのできるディレクティブであれば、
説明文書には「上書き」という項目があり、.htaccess に書くことができるように
なるための <code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code> の値が指定されています。</p>
<p>例えば、<code class="directive"><a href="../mod/core.html#adddefaultcharset">AddDefaultCharset</a></code> ディレクティブの説明を
見ると、<code>.htaccess</code> ファイルでの使用が許可されていることが
わかります。 (ディレクティブの概要の所にある「コンテキスト」と書かれている
行を見てください。) <a href="../mod/directive-dict.html#Context">上書き</a>と書かれている行には
<code>FileInfo</code> とあります。ですから、<code>.htaccess</code> 中の
このディレクティブが有効になるためには、少なくとも
<code>AllowOverride FileInfo</code> が設定されている必要があります。</p>
<div class="example"><h3>例:</h3><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></div>
<p>あるディレクティブを <code>.htaccess</code> ファイルに書くことができるか
どうかわからないときは、そのディレクティブの説明を探して、".htaccess"
のための「コンテキスト」の行を調べてください。</p>
</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="when" id="when">いつ .htaccess ファイルを使う(使わない)か。</a></h2>
<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> ファイルに書こうと考えるような
すべての設定は、サーバの主設定ファイルの <code class="directive"><a href="../mod/core.html#directory">&lt;Directory&gt;</a></code> セクションで同じように行なうことが
できます。</p>
<p><code>.htaccess</code> ファイルの使用を避ける理由は主に二つあります。</p>
<p>一つ目はサーバの性能の問題です。<code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code> ディレクティブが
<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>
<div class="example"><p><code>
/.htaccess<br />
/www/.htaccess<br />
/www/htdocs/.htaccess<br />
/www/htdocs/example/.htaccess
</code></p></div>
<p>ですから、そのディレクトリのそれぞれのファイルへのアクセスに対して、
上の例のファイルがまったく存在しないときでも、追加のファイルシステムの
アクセスが行なわれることになります。(これは、<code>.htaccess</code>
<code>/</code> に対して有効になっているときの場合で、普通はそうなって
いないことに注意してください。)</p>
<p>二つ目はセキュリティです。ユーザにサーバの設定を変更することを
許可することになりますので、あなた自身が管理できない変更をされる
恐れがあります。ユーザにこの特権を与えるのが良いのかどうか、十分
検討してください。また、ユーザに与える権限が必要なものよりも少なすぎると、
余分な技術サポート報告を受け取るようになる可能性が高いことにも
注意してください。確実に、ユーザにどの程度の権限を与えたか明確に告げるように
してください。<code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code>
何を設定したかということと、関連する文書を示すことで、
後々の混乱をぐっと減らすことが
できます。</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>
<div class="example"><h3><code>/www/htdocs/example</code> の .htaccess ファイルの
内容</h3><p><code>
AddType text/example .exm
</code></p></div>
<div class="example"><h3><code>httpd.conf のセクション</code>
file</h3><p><code>
&lt;Directory /www/htdocs/example&gt;<br />
<span class="indent">
AddType text/example .exm<br />
</span>
&lt;/Directory&gt;
</code></p></div>
<p>しかし、この設定はサーバ設定ファイルに書いた方がパフォーマンスの
低下が少なくなります。ファイルがリクエストされる度に
読み込まれる代わりに、Apache の起動時に 1 回だけ読み込めば
よくなるからです。</p>
<p><code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code> ディレクティブの
値を <code>none</code> に設定することで <code>.htaccess</code> ファイル
の使用を完全に無効にすることができます。</p>
<div class="example"><p><code>
AllowOverride None
</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="how" id="how">ディレクティブの適用のされ方</a></h2>
<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>
<div class="example"><p><code>
Options +ExecCGI
</code></p></div>
<p>(注: <code>.htaccess</code>
ファイルで "<code class="directive"><a href="../mod/core.html#options">Options</a></code>" ディレクティブが有効になるためには、
"<code>AllowOverride Options</code>" を有効にする必要があります。)</p>
<p>ディレクトリ <code>/www/htdocs/example1/example2</code> には
以下のような <code>.htaccess</code> ファイルがあります:</p>
<div class="example"><p><code>
Options Includes
</code></p></div>
<p>二つめの <code>.htaccess</code> により、ディレクトリ
<code>/www/htdocs/example1/example2</code> では CGI の実行は
許可されません。これは、<code>Options Includes</code> のみが
効力を持ち、それがすべての以前の設定を上書きするからです。</p>
</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="auth" id="auth">認証の例</a></h2>
<p>もし認証の方法を知るためにこの部分に直接来たのであれば、次のことを
知っておくことが重要です。よくある誤解に、パスワード認証を行なうためには
<code>.htaccess</code> ファイルを使う必要がある、というものがあります。
これは正しくありません。主サーバ設定ファイルの <code class="directive"><a href="../mod/core.html#directory">&lt;Directory&gt;</a></code> セクションに
認証用のディレクティブを書く方が推奨される方法で、<code>.htaccess</code>
ファイルは主サーバ設定ファイルを変更できないときにのみ使用すべきです。
いつ <code>.htaccess</code> ファイルを使うべきで、いつ使うべきではないかに
ついては <a href="#when"></a>を参照してください。</p>
<p>以上のことをふまえた上で、もし <code>.htaccess</code> の使用が
まだ必要だと思う場合は、次のようなものが望みのことをしてくれるかも
しれません。</p>
<p>ディレクティブが適用されるためには、
"<code>AllowOverride AuthConfig</code>" の設定がなされている
必要があります。</p>
<p><code>.htaccess</code> ファイルの内容:</p>
<div class="example"><p><code>
AuthType Basic<br />
AuthName "Password Required"<br />
AuthUserFile /www/passwords/password.file<br />
AuthGroupFile /www/passwords/group.file<br />
Require Group admins
</code></p></div>
<p>これらのディレクティブが有効になるためには、
<code>AllowOverride AuthConfig</code> が有効でなくてはならないことに
注意してください。</p>
<p>認証と承認については <a href="auth.html">認証チュートリアル</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="ssi" id="ssi">SSI の例</a></h2>
<p>もう一つの <code>.htaccess</code> ファイルのよくある利用法は
特定のディレクトリで SSI を有効にすることです。これは、望みのディレクトリの
<code>.htaccess</code> ファイルに以下の設定ディレクティブを書くことで
達成できます:</p>
<div class="example"><p><code>
Options +Includes<br />
AddType text/html shtml<br />
AddHandler server-parsed shtml
</code></p></div>
<p>これらのディレクティブが有効になるためには、
<code>AllowOverride Options</code><code>AllowOverride
FileInfo</code> が有効になっている必要があることに注意してください。</p>
<p>よりまとまった SSI の説明は <a href="ssi.html">SSI チュートリアル</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="cgi" id="cgi">CGI の例</a></h2>
<p>最後に、特定のディレクトリで CGI プログラムの実行を許可したいことが
あるでしょう。これは以下の設定で行なうことができます:</p>
<div class="example"><p><code>
Options +ExecCGI<br />
AddHandler cgi-script cgi pl
</code></p></div>
<p>もしくは、あるディレクトリのすべてのファイルが CGI プログラムと
みなされるようにしたいなら、以下の設定で実現することができます:</p>
<div class="example"><p><code>
Options +ExecCGI<br />
SetHandler cgi-script
</code></p></div>
<p>これらのディレクティブが有効になるためには、
<code>AllowOverride Options</code><code>AllowOverride
FileInfo</code> が有効である必要があることに注意してください。</p>
<p>CGI プログラムと設定のよりまとまった説明は <a href="cgi.html">CGI チュートリアル</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="troubleshoot" id="troubleshoot">問題解決</a></h2>
<p>設定ディレクティブを <code>.htaccess</code> ファイルに書いたけれども、
期待した効果が得られないときには、いくつかの原因が考えられます。</p>
<p>一番よくあることは、設定ディレクティブが考慮されるようには
<code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code> が設定されていない
というものです。該当のファイルのスコープに <code>AllowOverride None</code>
が設定されていないことを確認してください。これを調べるための良い方法は、
<code>.htaccess</code> ファイルにごみを書いて、リロードすることです。
サーバのエラーが生成されないときは、ほぼ確実に <code>AllowOverride
None</code> が設定されている状態になっています。</p>
<p>そうではなく、文書をアクセスしようとしたときにエラーが発生している
ときは、Apache のエラーログを調べてください。<code>.htaccess</code> ファイルで
使用されたディレクティブが許可されていない、ということを知らせている
可能性が高いです。または、構文の間違いがあることを述べているかもしれません。
その場合にはまずそれを修正する必要があります。</p>
</div></div>
<div class="bottomlang">
<p><span>翻訳済み言語: </span><a href="../en/howto/htaccess.html" hreflang="en" rel="alternate" title="English">&nbsp;en&nbsp;</a> |
<a href="../ja/howto/htaccess.html" title="Japanese">&nbsp;ja&nbsp;</a> |
<a href="../ko/howto/htaccess.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
</div><div id="footer">
<p class="apache">Copyright 2013 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>