У меня есть веб-сервер, который полностью заблокирован базовой аутентификацией.
<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>
Это работает, но мне не удалось заставить его работать без каталога, существующего в файловой системе.