Eu leioesta respostaa uma pergunta semelhante feita há algum tempo, e fazia sentido e correspondia à documentação do Apache 2.4. Mas tive a seguinte experiência, que parece contradizer essa resposta e a documentação. Considere as seguintes diretivas:
<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>
A intenção, claramente, é proteger todos os URLs com autenticação básica http,excetopara URLs abaixo /wp/feed
. Mas depois de recarregar o Apache, fui solicitado a fornecer credenciais ao acessar o /wp/feed
. Esse URL corresponde a ambos os caminhos de localização, então o apache deveria ter sido processado Require valid-user
seguido por Require all granted
e eu não deveria ter sido avisado. Apenas por "diversão", tentei mudar a ordem dos blocos de localização, mas ainda assim fui solicitado. A única coisa que descobri que funcionou como pretendia foi remover totalmente o bloco de localização de "/". Para mim, isso também foi um comportamento inesperado porque, nesse caso, não havia Require valid-user
nenhuma diretiva que deveria ter sido aplicada a URLs que não correspondiam a /wp/feed
. E ainda assim eles foram aplicados, pois fui solicitado a fornecer todos os URLs que não correspondiam /wp/feed
.
Alguém pode explicar isso? Estou apenas perdendo o barco para entender a resposta edocumentação?
Não tive problemas em especificar esse comportamento com as diretivas nginx, onde a correspondência de prefixo mais longa geralmente vence. Se o que obtive realmente é o comportamento esperado, como posso conseguir o que quero com o Apache?