さくらのVPS

WebサーバでApacheを使っているとき、「.htaccess」ファイルが有効かどうかを確認する方法を調べてみました。

.htaccessとは?

.htaccessとは - IT用語辞典

ApacheなどのWebサーバで使用できる、Webサーバの動作をディレクトリ単位で制御するためのファイル。
 
具体的には、CGIやSSIなどを実行するための宣言(命令)や、拡張子ごとにファイルタイプを指定するMIMEタイプの設定、ユーザ認証、IPアドレスやドメイン単位でのアクセス制限などを書き込むことができる。
 
.htaccessファイルで設定した内容は、.htaccessファイルがあるディレクトリとそのサブディレクトリに効果があり、効果があるディレクトリに入っているファイルすべてに影響をおよぼす。
 
また、サブディレクトリにも.htaccessファイルを別に置くこともでき、この場合は両方のファイルの効果が発生する(矛盾するときはサブディレクトリの設定を優先)。
 
Webサーバの設定ファイル(httpd.conf)を使用すると.htaccessファイルで設定できる内容を制限できるため、Apacheなどが動作しているサーバでも.htaccessを使用できなかったり、一部の機能しか使用できなかったりすることもある。

.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
      という検索結果が出てくる。
  • 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日追記)


トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS