WebサーバでApacheを使っているとき、「.htaccess」ファイルが有効かどうかを確認する方法を調べてみました。
.htaccessとは? †
Apache チュートリアル: .htaccess ファイル - Apache HTTP サーバ
.htaccess ファイル (「分散設定ファイル」) は ディレクトリ毎に設定を変更する方法を提供します。
ディレクティブの 書かれたファイルをディレクトリに置くことで、そのディレクトリとその サブディレクトリすべてにディレクティブを適用させることができます。
.htaccessファイルの書き方と設定・設置方法 [ホームページ作成] All About
ウェブ上に「.htaccess」という特殊なファイル名の設定ファイルを設置すると、アクセス制限やユーザー認証、リダイレクト(自動転送)、404エラーページのカスタマイズなど、様々な特殊機能が実現できます。
.htaccessの動作確認 †
問題の切り分けを行うために、.htaccessが有効な場合に動作するはずの設定をして、その結果を検証してみる。
redirect †
http://www.apache.jp/pipermail/apache-users/2006-July/006276.html
確認方法としては、適当に Redirect を使用されては如何でしょう。
All ですから、基本的に何でも通るはずですので、
> .htaccessにより設定の上書きを許可するために
> AllowOverride All
> を設定しているのですが、設定が正しく動作しているか確認する
> コマンド、方法は無いでしょうか?
該当するディレクトリの .htaccess に(たとえば /ex とすると)
Redirect /ex/ http://www.google.com
このような記述をすると、たとえば http://hoehoe.jp/ex/ へのア
クセスが http://www.google.com/ にリダイレクトされる=.htaccess
が有効になっている、と確認できます。
Options Indexes †
http://htaccess.me/study/06_check.html
.htaccessの練習として、「ディレクトリ内を表示させない/見せる」という設定を取り上げている、ということです。
すぐに実験してみたい方は、こちら。
ディレクトリ内の一覧を表示させない設定
ディレクトリ内の一覧を表示させる設定
Internal Server Error †
http://questionbox.jp.msn.com/qa2182567.html
第一段階: .htaccessの有効確認
.htaccess に test と記述します
これでアクセスすると
・1-A:Internal Server Errorとなりerror_logに"/.htaccess: Invalid command 'test'"と記録される
=>.htaccessは有効です
・1-B:何も変化無し
=>.htaccessが無効です
対策 †
- .htaccessが動作している場合
→.htaccessの記述内容を再チェックする。
.htaccessの記述内容が間違えており、期待した動作をしていないだけだと考えられる。
- .htaccessが動作していない場合
→Apacheの設定で、.htaccessを有効化する
Apacheの設定が間違えており、.htaccessが使えない状態にあると考えられる。
AllowOverrideの設定 †
- AllowOverride None → AllowOverride All に変更すれば、.htaccessが有効になる。
- VirtualHostを設定している場合は、そのホストの「Directory」ディレクティブで指定すればOK。
<VirtualHost *:80> ServerName subdomain.mydomain.com DocumentRoot /var/www/subdomain.mydomain.com ServerAdmin webmaster@mydomain.com ErrorLog logs/subdomain_error_log TransferLog logs/subdomain_access_log <Directory /var/www/subdomain.mydomain.com> AllowOverride All </Directory> </VirtualHost>
AllowOverrideの設定変更方法 †
(2015年3月18日追記)
- Apacheの設定ファイル「httpd.conf」の置き場所を調べる。
- locateコマンドで検索する方法
$ locate httpd.conf
というコマンドを実行すると/etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.org
という検索結果が出てくる。 - findコマンドで検索する方法
または、$ find / -name httpd.conf
というコマンドを実行すると/etc/httpd/conf/httpd.conf
という検索結果が出てくる。
- locateコマンドで検索する方法
- httpd.confのバックアップを作成
$ cd /etc/httpd/conf/ $ ls -la
で、ファイルの一覧を見て、httpd.confのバックアップファイル(ひな形ファイル)「httpd.conf.org」がない場合は、コピーして作成する。$ cp /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.org
- httpd.confの編集
$ cd /etc/httpd/conf/ $ vi httpd.conf
AllowOverrideのディレクティブ(設定項目)をvi上で探す。/ArrowOverride
見つけたら、書き換える。i
(AllowOverride None → AllowOverride All に変更)AllowOverride All
保存して終了エスケープキーを押す :wq
- Apacheを再起動
service httpd restart
または/etc/rc.d/init.d/httpd restart
というコマンドを実行して、Apacheを再起動する。
これで、設定の変更が、Apacheの動作に反映される。
参考 †
(2015年3月18日追記)