XServer のバグが原因で以下が正常に機能しない。
問題が発生する要件
・アクセス制限IDを2つ以上設定してある場合の2個目およびそれ以降
・アクセス制限を複数パスに設定している場合のID設定すべて
・iFrame で画面を分割している環境
この時、1個目の設定ID以外は、エラーし、複数登録の設定数まではID・PWの再入力を求めてくる、ID個数全てが終わるとエラーでアクセス不能
iFrame を使わなければ、何個目のIDを利用しても問題はない。
XServer は iFrame のアクセス制限機能のテストをしていない
iFrameの組み合わせが原因のようですが、アクセス制限の仕様上、仰せのような運用には適してはいないかもですね。。
公式マニュアル含め、iFrame利用時の動作保証などは見つからなかったので、iFrameを利用しない形にするか、認証方式を切り替えるなどの対策を講じるしかないかもです。
なお、こういった運用に対応してほしい、という意見をサポートに伝えておけば、将来的に改善される可能性もあるかとは思います。
XServerのアクセス制限はベーシック認証をかける機能ですが、
ブラウザのベーシック認証の仕様で、ベーシック認証は、設定ごとに一つの認証しか保持できない制約があります。
iframeの場合は、1つ目の認証が使い回されるので、2つ目から表示できなくなる問題は考えられそうです。
iframeで分けられたディレクトリごとにアクセス制限設定を複数(同じユーザー情報で)かけてみて回避できないかや、
・エラー文
・どのようなディレクトリ構成
・iframeの中身はどのような記述
かを伝えてみるとよさそうに思います。
エックスサーバーのアクセス制限機能( https://www.xserver.ne.jp/manual/man_server_limit.php )は、
・Basic認証自体はサーバーに設置された.htaccess、.htpasswdの内容をもとに実行する(一般的なApacheのBasic認証の処理と同じ)
・サーバー上の所定の位置に設置された.htaccess、.htpasswdの内容を読み取り、サーバーパネル上の設定状況に連動させている
・サーバーパネル上でアクセス制限のオンオフの切り替えやユーザーの登録などをした場合、サーバー上の所定の位置の.htaccess、.htpasswdの内容を修正する
といった挙動のようですが、bobさんの最新の発言など(ごめんなさい、それまでの発言をすべて精読したわけではありません)を見る限りでは、
・アクセス制限を無効にしてもID/PWを求めてくる
のあたりから、サーバーパネル側の一連の処理のなかの
・サーバー上に設置された.htaccess、.htpasswdの内容を読み取り、管理画面上の設定状況に連動させている
がそもそもうまくいっていないように見えました。
.htaccessはサーバーパネルの「アクセス制限」だけでなく、さまざまな作業により追記、削除、編集されるものですが、何かしらの処理の結果、.htaccessの記述が「アクセス制限機能の画面に反映させるためのパターンマッチでは認識できないような記述」になってしまって、bobさんが言うところの「サーバーパネルには表示されないゴーストアカウント」になってしまっているのかな、と。
ためしにアクセス制限機能をちょっといじった感じでは、この機能をオンにすると指定した階層の.htaccessに
AuthUserFile "/home/サーバーID/ドメイン名/htpasswd/.htpasswd" AuthName "Member Site" AuthType BASIC require valid-user
といった記述が追加されましたが、例えばこの記述の「AuthName」を変更して
AuthUserFile "/home/サーバーID/ドメイン名/htpasswd/.htpasswd" AuthName "hogehoge" AuthType BASIC require valid-user
などとすると、サーバーパネルの「アクセス制限」では認識されなくなり、その階層のアクセス制限は「OFF」と表示されるようで。なかなか厳密なパターンマッチというべきでしょうか。
例えば以下のような状況だと、「bobさんが認識している.htpasswd(その1側)とは異なる階層の.htpasswd(その2側)」で正誤チェックがされるので、
・その1側の.htpasswdを直接編集しても実際のBasic認証には反映されない(実際のアクセスにはその2側の.htpasswdが参照されるので)
・その1側のBasic認証を無効にしてもその2側のBasic認証は引き続き発生し、ID、パスワードの入力が求められる
といった状況が発生するかもしれません。
ドキュメントルート
┣.htaccess →Basic認証に関する記述その1。サーバーパネルに認識されている。
┗下層ディレクトリ
┣.htaccess →Basic認証に関する記述その2(ただし何かしらの編集が加わっており、サーバーパネルの「アクセス制限」では認識されていない)
┗★実際にアクセスしようとしているファイル
→「★」に実際にアクセスしたときは「Basic認証に関する記述その2」が優先して参照されるため(※)、「その2」側が参照している.htpasswdにてID、パスワードの正誤チェックがされる
※Apacheの一般的な仕様では、複数の階層にBasic認証が設置されている場合、下位ディレクトリの認証が優先され、下位ディレクトリの認証がとおってしまえば上位ディレクトリのBasic認証の設定は無視されるようです(認証ダイアログが開くこともありません)。
エックスサーバーがもっとしっかりして、.htaccessの内容を解析して設定画面に反映させてくれよ、というのはまあそのとおりだと思いますが、現時点でそれを求めても仕方ない感じでもあるので、ファイルマネージャやFTPソフトなどから各階層に設置された.htaccessの実際の内容をチェックし、Basic認証っぽい記述があれば手作業で削除するなどして、Basic認証まわりの記述(特に.htaccess側の記述)をいったんすべてリセットしてしまうとよいかもしれません。
また、Basic認証の際に表示される「AuthName」などを書き換えて運用したいということであれば、サーバーパネル上の表示がちぐはぐになってしまうことを前提にある程度手作業で設定状況を管理する必要がありそうです。
.htpasswdを直接編集できるスキルがあれば、.htaccess側ももちろんチェックしていそうなので、的外れの意見であればごめんなさい。
なにか問題解決の参考になりそうな情報があれば、断片だけでも活用していただけるとうれしいです。
質問・回答いただきありがとうございました。
■質問者様へ
質問が解決した際には、回答者の方へお礼をお伝えいただくとともに、質問のステータスを「解決済み」に変更してください。