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

Отключить базовую аутентификацию Apache в виртуальном подкаталоге

У меня есть веб-сервер, который полностью заблокирован базовой аутентификацией.

<Location />
    AuthType Basic
    # [...] rest of basic auth stuff
    require valid-user
    order deny,allow
    deny from all
    Satisfy any
</Location>

Один подкаталог доступен без авторизации:

<Location /public>
  allow from all
  Satisfy any
</Location>

Это нормально работает. Теперь я хочу разрешить доступ без входа в систему к некоторым сценариям, доступ к которым осуществляется с помощью mod_rewrite:

RewriteRule ^phonebook/show/(.+)$ /quicksearchShow.php?uid=$1 [NC]
RewriteRule ^phonebook/(.+)$ /quicksearch.php?s=$1 [NC]
RewriteRule ^phonebook$ /quicksearch.php [NC]

Я пробовал несколько способов:

<Location ~ "/phonebook*">
    Allow from all
    Satisfy Any
</Location>

<Location /phonebook>
    Allow from all
    Satisfy Any
</Location>

<LocationMatch "^phonebook.*">
    Allow from all
    Satisfy Any
</LocationMatch>

Ни один из этих вариантов не работает. Я предполагаю потому что /phonebook не является фактическим каталогом на сервере. Поэтому я попробовал несколько вариантов <Files> директивы:

<FilesMatch "/quicksearch.*">
    Allow from all
    Satisfy Any
</FilesMatch>

<FilesMatch "^quicksearch.*">
    Allow from all
    Satisfy Any
</FilesMatch>

<Files "quicksearch.php">
    Allow from all
    Satisfy Any
</Files>

Но тоже не повезло.

Итак, как мне установить параметры для конкретного «виртуального» каталога, который отображается через mod_rewrite?

Так что я отказался от этого подхода. Я создал подкаталог phonebook, переместил туда файлы и добавил это в конфигурацию apache:

<LocationMatch "^/(css|js|images|icons|phonebook)/">
    Order Deny,Allow
    Allow from All
    Satisfy Any
</LocationMatch>

Это работает, но мне не удалось заставить его работать без каталога, существующего в файловой системе.