Apache HTTP Serverのディレクトリ別設定ファイル.htaccess
概要
Apache HTTP Server (httpd) には設定ファイルの.htaccess
が存在する。このファイルについてちゃんと理解できていなかったので整理する。
Apache HTTP Server v2.4の公式マニュアルの「Apache HTTP Server Tutorial: .htaccess files – Apache HTTP Server Version 2.4」を参考にした。
Apacheには2種類のhttpd.conf
と.htaccess
の2種類の設定ファイルが存在する。httpd.conf
はサーバー全体の設定であり,.htaccess
はディレクトリー単位の設定ファイルとなっている。.htaccess
はファイルが置かれたディレクトリー以下に対して有効な設定となる。httpd.conf
での<Directory>
ブロック相当の設定を行なえる。
.htaccess
が存在すると,配下のファイルのリクエストの度に.htaccess
が読み込まれる。そのため,パフォーマンスの観点から,できるだけ.htaccess
を使わずにhttpd.conf
で設定することが公式で推奨されている。
用途
公式で推奨されていない.htaccess
だが,以下の3の利点がある。
一番重要なのが1点目だ。レンタルサーバーは格安でWebサービスを運営できるのだが,サーバーを共有しているため,当然ながら管理者権限が使えず,httpd.conf
を編集できない。その際に,.htaccess
は管理者権限不要で設定ができることから,使用可能なケースが多い。そのため,レンタルサーバーでのサーバー設定では.htaccess
を使うしかない。
なお,.htaccess
のファイル名はAccessFileName
指令で以下のように変更することができる。
AccessFileName .config
ただ,.htaccess
で一般的に名前が通っているので,下手に名前を変えずにそのまま.htaccess
のファイル名を使ったほうがいいだろう。
.htaccess
で指定可能な指令
.htaccess
の設定は基本的にhttpd.oonf
と同じだ。ただし,httpd.conf
で使える指令が何でも指定可能なわけではない。
.htaccess
で指定可能な指令 (ディレクティブ: directive) はhttpd.conf
で指定されたAllowOverride指令とAllowOverreideList指令で決まる。
それぞれ,.htaccess
で上書き可能な指令をAllowOverride
指令はカテゴリー単位,AllowOverrideList
指令は指令単位で指定する。
.htaccess
で上書き可能な指令の可否は,指令の説明の上書き (Override) 欄で判断する。この欄に,AllowOverride
指令のカテゴリーが記されている。その都度,確認するのが手間であれば「.htaccessで使用可能な指令一覧」に全一覧を掲載しているので,こちらも参考にする。
逆に,AllowOverride
指令とAllowOverrideList
指令で指定されていない指令を.htaccess
で指定すると,Internal Server Errorが発生して,その配下のページを応答できないので注意する。
なお,AllowOverride
指令とAllowOverrideList
指令のデフォルト値はNone
であり,両方ともNone
の場合,.htaccess
の読み込みを完全に無視し,読み込み処理も省略されるためApacheの性能が向上する。
AllowOverride
指令の値
AllowOverride
指令で指定可能な値はAll, None, AuthConfig, FileInfo, Indexes, Limit, Nonfatal, Options
のいずれかだ。
この内,All
は全てのカテゴリーを意味し,None
はどのどのカテゴリーも指定しないことを意味する。残りの値はそれぞれのカテゴリーを意味する。
ここで,AllowOverride
指令には何の値を指定すべきかという問題がでてくる。.htaccess
を使う予定がなければ,デフォルトのNone
でよい。.htaccess
を使う場合,以下の値を推奨する。
AllowOverride AuthConfig FileInfo Indexes Limit
ここで指定されなかったカテゴリーとその理由は以下の通りとなる。
基本的にはどの指令もユーザーが使う可能性がある。ただし,Options
とNonfatal
は悪い影響が大きいので,これらは除外したほうがいいだろう。ローカルの開発環境で動作を確認したいだけならば,安全なのでAll
でも問題ない。
上記の設定は,後述する通り実際のレンタルサーバーの設定値と同じため,信頼性も高い。
AllowOverride
指令の値の確認
レンタルサーバーなどで現在のAllowOverride
指令とAllowOverrideList
指令の値を把握したい場面がある。
mod_info
が有効な場合 (apachectl -M | grep mod_info
で確認),以下のコマンドで現在設定されているAllowOverride
指令とAllowOverrideList
指令の値を確認できる (参考: Apache の情報をコマンドラインで取得する – Qiita,mod_info – Apache HTTP Server Version 2.4)。
httpd -t -D DUMP_CONFIG | grep AllowOverride
これで現在のレンタルサーバーの.htaccess
で使用可能な指令を確認できる。
実際に,自分が使っているCORESERVERで確認すると,以下のカテゴリーが指定されていた。
AllowOverride AuthConfig FileInfo Indexes Limit
逆に,mod_info
がインストールされていない場合,実際に.htaccess
に指令を指定して,エラーの有無で確認するしかないだろう。
結論
.htaccess
について整理した。
レンタルサーバーを使う場合,リダイレクトなどサーバーを設定する際に使うことになる。
今回,.htaccess
についてしっかり整理できたので,今度は.htaccess
に書き込むmod_rewrite
などのもう少し細かい設定について整理したいと思う。