[[さくらのVPS]] WebサーバでApacheを使っているとき、「.htaccess」ファイルが有効かどうかを確認する方法を調べてみました。 #contents *.htaccessとは? [#tf2a9de9] [[.htaccessとは - IT用語辞典>http://e-words.jp/w/2Ehtaccess.html]] >ApacheなどのWebサーバで使用できる、Webサーバの動作をディレクトリ単位で制御するためのファイル。 具体的には、CGIやSSIなどを実行するための宣言(命令)や、拡張子ごとにファイルタイプを指定するMIMEタイプの設定、ユーザ認証、IPアドレスやドメイン単位でのアクセス制限などを書き込むことができる。 .htaccessファイルで設定した内容は、.htaccessファイルがあるディレクトリとそのサブディレクトリに効果があり、効果があるディレクトリに入っているファイルすべてに影響をおよぼす。 また、サブディレクトリにも.htaccessファイルを別に置くこともでき、この場合は両方のファイルの効果が発生する(矛盾するときはサブディレクトリの設定を優先)。 Webサーバの設定ファイル(httpd.conf)を使用すると.htaccessファイルで設定できる内容を制限できるため、Apacheなどが動作しているサーバでも.htaccessを使用できなかったり、一部の機能しか使用できなかったりすることもある。 * .htaccessの動作確認 [#zf322a70] 問題の切り分けを行うために、.htaccessが有効な場合に動作するはずの設定をして、その結果を検証してみる。 ** redirect [#f126dd1a] 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 [#ece17123] http://htaccess.me/study/06_check.html >.htaccessの練習として、「ディレクトリ内を表示させない/見せる」という設定を取り上げている、ということです。 すぐに実験してみたい方は、こちら。 [[ディレクトリ内の一覧を表示させない設定>http://htaccess.me/indexes/]] [[ディレクトリ内の一覧を表示させる設定>http://htaccess.me/indexes/index2.html]] ** Internal Server Error [#w88319b7] 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が無効です *対策 [#r037873b] - .htaccessが動作している場合 →.htaccessの記述内容を再チェックする。 .htaccessの記述内容が間違えており、期待した動作をしていないだけだと考えられる。 - .htaccessが動作していない場合 →Apacheの設定で、.htaccessを有効化する Apacheの設定が間違えており、.htaccessが使えない状態にあると考えられる。 ** AllowOverrideの設定 [#dc64c212] - 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の設定変更方法 [#l7a6a072] (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 という検索結果が出てくる。 - 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の動作に反映される。 *** 参考 [#d3c433b6] (2015年3月18日追記) -[[Apache/2.x/httpd.confの配置場所(ファイルパス)を調べる方法 - PukiWiki>http://www.lovebug.jp/index.php?Apache%2F2.x%2Fhttpd.conf%E3%81%AE%E9%85%8D%E7%BD%AE%E5%A0%B4%E6%89%80%EF%BC%88%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%83%91%E3%82%B9%EF%BC%89%E3%82%92%E8%AA%BF%E3%81%B9%E3%82%8B%E6%96%B9%E6%B3%95]] -[[Apache ウェブサーバーで .htaccess を利用するには | XpressOne Knowledge Base 「サポート技術情報」>http://kb.xpressone.net/2566]]