Я читаюэтот ответна аналогичный вопрос, заданный некоторое время назад, и он имел смысл и соответствовал документации Apache 2.4. Но у меня был следующий опыт, который, кажется, противоречит этому ответу и документации. Рассмотрите следующие директивы:
<Directory "/opt/lampp/htdocs/foo">
AuthName "foo user"
AuthType Basic
Authuserfile /opt/lampp/passwds/foo.users
</Directory>
<VirtualHost *:80>
ServerName foo.example.com
DocumentRoot "/opt/lampp/htdocs/foo/public"
ErrorLog "logs/foo.error_log"
<Location />
Require valid-user
</Location>
<Location /wp/feed>
Require all granted
</Location>
CustomLog "logs/foo.access_log" combined
</VirtualHost>
Цель, очевидно, состоит в том, чтобы защитить все URL-адреса с помощью базовой http-аутентификации,кромедля URL-адресов ниже /wp/feed
. Но после перезагрузки Apache у меня запросили учетные данные при переходе на /wp/feed
. Этот URL-адрес соответствует обоим путям Location, поэтому Apache должен был обработать Require valid-user
следующий Require all granted
, и мне не следовало запрашивать. Просто ради «забавы» я попробовал поменять порядок блоков location, но все равно получил запрос. Единственное, что я смог найти, что сработало так, как я и предполагал, — это полностью удалить блок location для «/». Для меня это также было неожиданным поведением, потому что в этом случае вообще не было никаких Require valid-user
директив, которые должны были применяться к URL-адресам, не соответствующим /wp/feed
. И все же они были применены, так как мне был предложен запрос для всех URL-адресов, которые не соответствуют /wp/feed
.
Может кто-нибудь объяснить? Я просто не понимаю ответ идокументация?
У меня не возникло проблем с указанием этого поведения с помощью директив nginx, где обычно побеждает самый длинный префикс. Если то, что я получил, действительно является ожидаемым поведением, как я могу получить то, что хочу, с помощью apache?