症状
Basic認証を入れたのに、ブラウザで パスワード入力ダイアログが出ない。curl -I でも 200 OK のまま。
curl -I https://new.example.com/
# HTTP/1.1 200 OK
原因
<Directory> で認証をかけていたが、<Directory> は URLではなく実フォルダに対して効く設定。
Laravel+リライトなどの影響で、Apacheがそのリクエストを そのDirectoryにマッチさせられず、認証が発動しなかった。
<Directory /var/www/html/example-new/public>
AuthType Basic ...
</Directory>
解決方法
<Directory> をやめて、URLに対して確実に効く <Location> で認証をかけたら直った。
<Location "/">
AuthType Basic
AuthName "Restricted Area"
AuthUserFile /etc/httpd/.htpasswd-new
Require valid-user
</Location>
反映:
sudo httpd -t && sudo systemctl restart httpd
成功判定(401になればOK):
curl -I https://new.example.com/ | egrep -i 'HTTP/|WWW-Authenticate'
# HTTP/1.1 401 Unauthorized
補足
<Location "/"> は / 配下すべてに認証がかかる(サイト全体保護)。
移行中のステージング用途なら安全。
