htaccess Basic認証と500エラーの原因

htaccessロゴ

1.Basic認証 コード

.htaccess

<Files ~ "^\.(htaccess|htpasswd)$">
deny from all
</Files>
Options -Indexes
AuthUserFile /フルパス/.htpasswd
AuthGroupFile /dev/null
AuthName "Please enter your ID and password"
AuthType Basic
require valid-user 
order deny,allow

.htpasswd

ユーザー名:暗号化されたパスワード

基本的には、上記の内容を記載した.htaccessファイルと、.htpasswdファイルを、Basic認証を入れたいページの階層に入れるコトで、ページに鍵をかけるコトが出来ます。

2.500 Internal Server Error 考えられる理由 (1)

多くの場合、htaccess内の記述が間違っています。
特にフルパスの部分です。

フルパスは各レンタルサーバー、管理画面内のアカウント情報などで確認するコトが出来ます。

レンタルサーバーで渡された初期ドメインを使い、ルートにBasic認証を置く場合は、上記htaccess記述例のAuthUserFileの部分に、レンタルサーバー管理画面に載っているフルパスをそのままコピペすれば、Basic認証が使えますが、独自ドメインや特定のサブディレクトリにBasic認証を設置する場合は、レンタルサーバー管理画面に載っているフルパスにディレクトリ名を追加しないといけません。

例えば、example.com と言う独自ドメインを取得し、サーバー内のexampleディレクトリに紐つけているのであれば、上記htaccess記述例を使うと、

AuthUserFile /フルパス/example/.htpasswd

と言った形にしないといけません。

example.com/sub と言ったsubと言うディレクトリにBasic認証をかける場合は、

AuthUserFile /フルパス/example/sub/.htpasswd

と記述して、subディレクトリの中に「htaccess」「htpasswd」の2つを入れます。

また、サブドメインに設置する場合は、サーバー内の階層をみれば普通にわかるかもしれませんが、注意が必要で、

例えば、subdomain.example.com と言ったサブドメインを作り、サーバー内のsubdomainディレクトリに紐つけているのであれば、

AuthUserFile /フルパス/subdomain/.htpasswd

と言った形になり、サブドメインではありますが、メインドメインの中に作っている訳ではないので、/example/と言うディレクトリの記述は不要になります。

3.500 Internal Server Error 考えられる理由 (2)

ファイル内の最後に改行が入っているか?

「htaccess」「htpasswd」を使う場合は、内容の最後に空の1行を入れないとエラーが起きます。
最後は改行して終えましょう。

4.500 Internal Server Error 考えられる理由 (3)

その他、考えられる原因は以下のようなコトが考えられます。

  • ファイル内に全角スペース/全角文字がある
  • htpasswdで使うパスワードが暗号化されてない
  • パーミッションが604になっていない(604でダメなら644に変更してみる)
  • 文字コードがUTF-8 BOMありになってる場合、なしに変更する
  • 改行コードがLF以外になっている場合はLFにしてみる
  • そもそも利用しているサーバーはhtaccessが利用可能か?
  • 上記のどれを直してもダメであるなら、AuthGroupFile /dev/null の1行を消してみる

参考になれば幸いです。

Categories: htaccess