AuthUserFileの絶対パスを調べる方法|相対パスが使えない理由とBasic認証の500エラー対処

2025.07.11

AuthUserFileの絶対パスを調べる方法|相対パスが使えない理由とBasic認証の500エラー対処

.htaccessでBasic認証を設定するときは、ユーザー名とパスワードを書いた .htpasswd ファイルの場所を、AuthUserFile にサーバー上の絶対パスで書く必要があります。このパスが間違っていると、認証画面は表示されるのに、正しいユーザー名とパスワードを入力すると「500 Internal Server Error」になります。

この記事では、AuthUserFileに相対パスが使えない理由、.htpasswdを置く場所、絶対パスをPHP・SSH・サーバーの管理画面で調べる方法、うまく認証できないときの確認ポイントまでを解説します。

AuthUserFileとは

AuthUserFileは、Basic認証で使う .htpasswd ファイルの場所をApacheに伝える設定です。.htaccessに次のように書きます。

Apache
AuthType Basic
AuthName "Restricted Area"
AuthUserFile /home/example/.htpasswd
Require valid-user

アクセスした人がユーザー名とパスワードを入力すると、Apacheは AuthUserFile に書かれたファイルを開いて、正しい組み合わせかどうかを確かめます。Basic認証の設定全体は「.htpasswd を使ったベーシック認証の完全ガイド」で解説しています。

相対パスが使えない理由

.htaccessと同じフォルダに .htpasswd を置いたからといって、AuthUserFile .htpasswd のように相対パスで書くと、うまく動きません。AuthUserFileの相対パスは、.htaccessがある場所からではなく、Apacheがインストールされているフォルダ(ServerRoot)から見た位置として扱われるためです。

実際にWindowsのXAMPP(Apache 2.4)で相対パスを試すと、次のようになりました。

  • ページを開くと、認証画面は通常どおり表示される
  • 正しいユーザー名とパスワードを入力すると、500エラーになる
  • エラーログには「Could not open password file: C:/xampp/apache/.htpasswd」と記録され、Apacheのフォルダの中を探していたことが分かる

そのため、AuthUserFileには「/」から始まる絶対パス(Windowsでは「C:/」のようなドライブ名から始まるパス)を書きます。

.htpasswdを置く場所

.htpasswdは、できれば公開ディレクトリ(public_html など、ブラウザからアクセスできるフォルダ)の外に置きます。

Plaintext
/home/example/
├── .htpasswd        ← ここに置く(ブラウザからは見られない)
└── public_html/     ← 公開ディレクトリ
    └── staging/
        └── .htaccess

Apacheは通常、「.ht」で始まるファイルをブラウザから見られないように設定されているので、公開ディレクトリの中に置いても、直接開くと403エラーになります。ただし、これはサーバーの設定しだいです。ファイルが見られるとパスワードの解析を試みられるおそれがあるので、公開ディレクトリの外に置けるサーバーなら、外に置くほうが安全です。

絶対パスを調べる方法

方法1:PHPで調べる

PHPが使えるサーバーなら、次の内容で check-path.php というファイルを作り、.htpasswd を置きたいフォルダにアップロードします。

PHP
<?php
echo __DIR__ . '/.htpasswd';

ブラウザで https://example.com/staging/check-path.php のように開くと、そのフォルダに .htpasswd を置いた場合の絶対パスが表示されます。

Plaintext
/home/example/public_html/staging/.htpasswd

公開ディレクトリの外(1つ上のフォルダ)に置く場合のパスは、次のコードで調べられます。どのフォルダにアップロードしても同じ結果になります。

PHP
<?php
echo dirname($_SERVER['DOCUMENT_ROOT']) . '/.htpasswd';

確認が終わったら、check-path.php は必ずサーバーから削除してください。サーバーのフォルダ構成は、第三者に知られないほうが安全です。

方法2:SSHで調べる

SSHでサーバーにログインできる場合は、.htpasswd を置きたいフォルダに移動して、pwd コマンドを実行します。

ShellScript
cd ~/public_html/staging
pwd

/home/example/public_html/staging のように表示されたら、その後ろに /.htpasswd を付けたものが AuthUserFile に書くパスです。すでに .htpasswd がある場合は、realpath コマンドでファイルの絶対パスを直接表示できます。

ShellScript
realpath .htpasswd

方法3:サーバーの管理画面やマニュアルで調べる

多くのレンタルサーバーでは、管理画面のサーバー情報や、Basic認証についてのマニュアルに、フルパス(ホームディレクトリのパス)が載っています。PHPやSSHを使わずに済むので、まずはここを確認するのが手軽です。

注意したいのは、FTPソフトに表示されるパスです。FTPソフトでは、自分のフォルダがいちばん上(/)として表示されることが多く、/public_html/staging のような表示になります。これはサーバー上の実際のパスとは違うので、そのままAuthUserFileに書いても動きません。

ローカル環境(XAMPPなど)の場合

Windowsのパソコンで動かしているXAMPPなどでは、ドライブ名から書きます。区切りは「/」でも「\」でも動きますが、パスにスペースが含まれる場合は、全体を " で囲んでください。

Apache
AuthUserFile "C:/xampp/htdocs/mysite/.htpasswd"

ローカル環境と公開サーバーではパスが違うので、.htaccessをそのままアップロードすると、公開サーバーで500エラーになります。アップロードする前に、公開サーバーのパスに書き換えてください。

うまく認証できないときの確認ポイント

認証画面は出るが、入力すると500エラーになる

AuthUserFileのパスに問題があるときの典型的な症状です。認証画面は .htaccess の設定だけで表示されるため、.htpasswdが見つからなくても表示されます。Apacheが .htpasswd を開こうとするのは、ユーザー名とパスワードが入力された後だからです。

原因は、サーバーのエラーログで確かめられます。レンタルサーバーでは、管理画面からエラーログを見られることが多いです。

エラーログの文言意味と対処
Could not open password file: (パス)書かれたパスに .htpasswd が無い。表示されているパスを見て、相対パスになっていないか、つづりが間違っていないかを確認する
AuthUserFile not specified in the configurationAuthUserFileの行が無い。書き忘れや、行の先頭に「#」が付いてコメントになっていないかを確認する
user (ユーザー名) not found.htpasswdは開けたが、入力したユーザー名が登録されていない
user (ユーザー名): authentication failureユーザー名はあるが、パスワードが違う

何度入力しても認証画面が出る

  • パスワードの打ち間違い:大文字・小文字の違いや、キーボードの入力モード(全角)を確認します。
  • .htpasswdの中身:「ユーザー名:暗号化したパスワード」の形で、1行に1ユーザーずつ書かれているか確認します。暗号化していないパスワードをそのまま書くと、Linuxのサーバーでは認証できません。
  • 暗号化の方式:古いサーバーでは、新しい暗号化方式(bcrypt)に対応していないことがあります。サーバー会社のマニュアルで、対応している方式を確認してください。

.htpasswdの中身は、「.htpasswdファイル作成ツール」で、ユーザー名とパスワードを入力するだけで作れます(bcryptで暗号化します)。

認証画面が表示されない

認証画面そのものが出ない場合は、AuthUserFileではなく、.htaccessが読み込まれていないなど、別の原因が考えられます。確認のしかたは「Basic認証を特定のディレクトリだけにかける方法」の「うまくいかないときの確認ポイント」で解説しています。

まとめ

  • AuthUserFileには、.htpasswdの場所をサーバー上の絶対パスで書く
  • 相対パスは .htaccess の場所ではなく、Apacheのインストール先から探されるので使えない
  • .htpasswdは、できれば公開ディレクトリの外に置く
  • 絶対パスは、PHP(__DIR__)、SSH(pwd)、サーバーの管理画面で調べられる。FTPソフトの表示は実際のパスと違うことがある
  • 「認証画面は出るが、入力すると500エラー」になったら、エラーログでパスを確認する

Basic認証は、ディレクトリやファイルを絞ってかけることもできます。詳しくは「Basic認証を特定のディレクトリだけにかける方法」、IPアドレスによる制限との組み合わせは「.htaccessでIP制限をかける方法」「.htaccessで2段階のアクセス制限をかける方法」をご覧ください。

関連記事

PAGE TOP