Yo leoesta respuestaa una pregunta similar formulada hace algún tiempo, tenía sentido y coincidía con la documentación de Apache 2.4. Pero tuve la siguiente experiencia, que parece contradecir esa respuesta y la documentación. Considere las siguientes directivas:
<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>
La intención, claramente, es proteger todas las URL con autenticación básica http,exceptopara las URL a continuación /wp/feed
. Pero después de recargar Apache, me solicitaron las credenciales cuando fui a /wp/feed
. Esa URL coincide con ambas rutas de ubicación, por lo que Apache debería haberse procesado Require valid-user
seguido de Require all granted
y no debería haberme preguntado. Sólo por "diversión", intenté cambiar el orden de los bloques de ubicación, pero aún así me preguntaron. Lo único que pude encontrar que funcionó como pretendía fue eliminar por completo el bloque de ubicación para "/". Para mí, ese también fue un comportamiento inesperado porque en ese caso no había Require valid-user
ninguna directiva que debería haberse aplicado a las URL que no coincidían /wp/feed
. Y aún así se aplicaron, ya que me solicitaron todas las URL que no coincidían /wp/feed
.
¿Alguien puede explicar esto? ¿Estoy simplemente perdiendo el camino para entender la respuesta ydocumentación?
No tuve problemas para especificar este comportamiento con directivas nginx, donde generalmente gana la coincidencia de prefijo más larga. Si lo que obtuve realmente es el comportamiento esperado, ¿cómo puedo obtener lo que quiero con Apache?