Назад | Перейти на главную страницу

Apache2 с базовой аутентификацией: исключить одно местоположение из аутентификации (странное поведение)

У меня есть базовая аутентификация для 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

Это переопределит более общие настройки файла в каталоге над ним и будет обслуживать ресурсы без необходимости авторизации.