У меня есть веб-сервер с несколькими виртуальными хостами. Некоторые из этих хостов имеют связанный ssl-сайт. У меня есть директива DirectoryMatch в моем основном файле конфигурации, которая требует базовой аутентификации для любого каталога с обеспечен как часть пути к каталогу. На сайтах с SSL-сайтом у меня есть правило перезаписи (расположенное в конфигурации, отличной от ssl для этого сайта), которое перенаправляет на SSL-сайт, тот же uri.
Проблема в том, что сайт http (80) сначала запрашивает учетные данные, а затем сайт https (443) снова запрашивает учетные данные. Я хотел бы запретить http-сайту запрашивать и, таким образом, избежать возможности того, что кто-то введет учетные данные и отправит их в виде открытого текста. Я знаю, что могу переместить DirectoryMatch на конкретный сайт и просто поместить инструкцию auth в конфигурацию SSL, но это приведет к тому, что при создании новых сайтов можно забыть о защите критических каталогов.
Вот соответствующие объявления: httpd.conf (все сайты):
<DirectoryMatch "_secured_">
AuthType Basic
AuthName "+ + + Restrcted Area on Server + + +"
AuthUserFile /home/websvr/.auth/std.auth
Require valid-user
</DirectoryMatch>
site.conf (для конкретного сайта)
<DirectoryMatch "_secured_">
RewriteEngine On
RewriteRule .*(_secured_.*) https://site.com/$1
</DirectoryMatch>
Есть ли способ оставить DirectoryMatch в основном файле конфигурации и предотвратить запрос авторизации с сайта http?
Запуск Apache 2 на сервере Ubuntu 10.04 из пакета по умолчанию. У меня для AllowOverride установлено значение none - я предпочитаю обрабатывать вещи в файлах конфигурации, а не в .htaccess.
Вы должны перезаписать перед запросом аутентификации.
Как выглядят ваши другие правила перезаписи? Если все они такие же, как в примере, вы можете переместить их в основной DirectoryMatch. Напишите чек, чтобы узнать, поддерживает ли сайт SSL. Если нет, перенаправьте.
Тогда аутентификация произойдет потом. Что-то вроде:
<DirectoryMatch "_secured_">
RewriteCond %{SERVER_PORT} !^443$
RewriteRule ^.*(_secured_.*)$ https://%{HTTP_HOST}/$1 [R=301,L]
AuthType Basic
AuthName "+ + + Restrcted Area on Server + + +"
AuthUserFile /home/websvr/.auth/std.auth
Require valid-user
</DirectoryMatch>