# Исключить папку мультимедиа из базовой аутентификации
SetEnvIf Request_URI "^/media/*" носитель
Порядок разрешить, запретить
Требовать действительного пользователя
Разрешить из env=media
Запретить от env=!media
Удовлетворить любой
Это сработало бы, за исключением того, что регулярное выражение неверно в SetEnvIf
директива, поэтому env var СМИ
не устанавливается при запросе /media/someimage.jpg
. Вам не хватает точки перед *
квантификатор, т. ^/медиа/.*
. Тем не менее, вы можете просто удалить трейлинг *
вообще, т. ^/медиа/
, что фактически то же самое (и более эффективное).
Запретить от env=!media
директива лишняя.
Итак, должно работать следующее:
# Исключить папку мультимедиа из базовой аутентификации
SetEnvIf Request_URI "^/media/" носитель
Требовать действительного пользователя
Порядок разрешить, запретить
Разрешить из env=media
Удовлетворить любой
ОДНАКО это использует устаревшие директивы Apache 2.2. Вместо этого в Apache 2.4 вы можете сделать следующее:
# Исключить папку мультимедиа из базовой аутентификации
SetEnvIf Request_URI "^/media/" носитель
Требовать действительного пользователя
Требовать среды окружения
По умолчанию контейнер <RequireAny>
- так что вам не нужно включать это. Хотя вы можете быть явным, если хотите:
<RequireAny>
Require valid-user
Require env media
</RequireAny>
В качестве альтернативы вы можете окружить весь блок авторизации в <If>
выражение. Например:
# Защитите паролем все, кроме подкаталога "/media/"
<If "%{REQUEST_URI} !~ m#^/media/#">
Основной тип авторизации
Имя авторизации "Защищено"
AuthUserFile "/var/www/company/.htpasswd"
Требовать действительного пользователя
</Если>
Оператор !~
является отрицательным соответствием регулярному выражению.