У меня есть базовая аутентификация для Directory /, и я хочу исключить Location / assets / upload, но это просто не сработает, я пробовал несколько вариантов и руководств.
Эта директива Location очищает конфигурацию авторизации каталога и отключает базовую аутентификацию для всего сайта:
<Directory "/">
AuthType Basic
AuthName "Staging"
AuthUserFile /var/.../.htpasswd
AuthGroupFile /dev/null
Require valid-user
</Directory>
<Location "/">
Order deny,allow
Allow from all
Satisfy any
</Location>
Однако я просто хочу, чтобы / assets / upload был без базовой аутентификации, но если я измените 1-й параметр Location на / assets / upload, вся страница, в том числе / assets / upload защищен базовой аутентификацией...
<Location "/assets/upload">
Order deny,allow
Allow from all
Satisfy any
</Location>
Что здесь могло быть не так?
Версия: Apache / 2.2.16 (Debian)
Боюсь, что вы неправильно поняли несколько концепций Apache. Аргумент в <Directory>
block - это полный путь к файловой системе, а не относительно корня сервера. Вам следует никогда действительно изменить <Directory />
блокировать по умолчанию. Вам не нужно изменять его, чтобы ваша конфигурация работала.
Аргумент к <Location>
блокировать является относительно корня сервера. Итак, вам просто нужны два таких блока, чтобы достичь желаемого.
<Location "/assets/upload"> Order deny,allow Allow from all Satisfy any </Location> <Location "/"> AuthType Basic AuthName "Staging" AuthUserFile /var/.../.htpasswd AuthGroupFile /dev/null Require valid-user </Location>
У вас должен быть сингл <Directory />
block в глобальном / серверном контексте (т.е.не внутри какого-либо vhost), и это должно быть примерно так.
<Directory /> Options FollowSymLinks AllowOverride None Order allow,deny Deny from all </Directory>
В каталог / assets / upload поместите другой файл .htaccess с этим содержимым;
Allow from all
Satisfy any
Это переопределит более общие настройки файла в каталоге над ним и будет обслуживать ресурсы без необходимости авторизации.