Как использовать базовую аутентификацию для одного файла в запрещенном каталоге Apache?

Как использовать базовую аутентификацию для одного файла в запрещенном каталоге Apache?

Я хочу разрешить доступ к одному файлу в каталоге, который в противном случае был бы запрещён.

Это не сработало:

<VirtualHost 10.10.10.10:80>
  ServerName example.com

  DocumentRoot /var/www/html

  <Directory /var/www/html>
    Options FollowSymLinks
    AllowOverride None
    order allow,deny
    allow from all
  </Directory>

  # disallow the admin directory: 
  <Directory /var/www/html/admin>
    order allow,deny
    deny from all
  </Directory>

  # but allow this single file:: 
  <Files      /var/www/html/admin/allowed.php>
      AuthType basic
      AuthName "private area"
      AuthUserFile /home/webroot/.htusers
      Require user admin1
  </Files>

  ...
</VirtualHost>

Когда я захожу, http://example.com/admin/allowed.phpя получаю сообщение Forbidden каталога http://example.com/admin/, но не всплывающее окно входа в браузер от базовой аутентификации, поэтому базовая аутентификация не работает с файлом. Как мне сделать исключение для allowed.php?

Если это невозможно, может быть, я мог бы перечислить все запрещенные файлы в другой директиве Files?

Допустим, admin/ содержит также user.php и admin.php, которые должны быть запрещены на этом виртуальном хосте.

Редактировать:Я также попробовал следующую модификацию, пытаясь следовать совету из ответа Игнасио, с тем же результатом «Запрещено»:

  ...

  # disallow the admin directory: 
  <Directory /var/www/html/admin>
    order allow,deny
    deny from all
  </Directory>

  # but allow this single file:: 
  <Files      /var/www/html/admin/allowed.php>
      order allow,deny
      allow from all
      AuthType basic
      AuthName "private area"
      AuthUserFile /home/webroot/.htusers
      Require user admin1
      satisfy all
  </Files>
  ...

решение1

Попробуй это:

<Directory /var/www/html/admin>
  <Files allowed.php>
    AuthType basic
    AuthName "private area"
    AuthUserFile /home/webroot/.htusers
    Require user admin1
  </Files>
  order allow,deny
  deny from all
  satisfy any
</Directory>

Файлы, вложенные в Directory, будут применяться только в нем, поэтому ваш блок кода организован более логично, и я думаю, что использование 'Satisfy any' позволит объединить их, как и планировалось. Я не уверен, требуется ли это на самом деле, поэтому попробуйте со строкой satisfy и без нее...

решение2

Я не уверен, что решение с этим <Files xxx>действительно работает хорошо, так какТребовать страницу документаутверждает, что это не относится кFiles

Context:    directory, .htaccess

Вместо этого документация Apache предлагает создать отдельный каталог для файла:

Удаление элементов управления в подкаталогах

Следующий пример показывает, как использовать директиву Satisfy для отключения контроля доступа в подкаталоге защищенного каталога. Эту технику следует использовать с осторожностью, поскольку она также отключит любой контроль доступа, наложенный mod_authz_host.

<Directory /path/to/protected/>
    Require user david
</Directory>
<Directory /path/to/protected/unprotected>
    # All access controls and authentication are disabled
    # in this directory
    Satisfy Any
    Allow from all
</Directory>

Связанный контент