Apache führt Standortabschnitte (erneut) zusammen

Apache führt Standortabschnitte (erneut) zusammen

ich lesediese Antwortauf eine ähnliche Frage, die vor einiger Zeit gestellt wurde, und sie ergab durchaus Sinn und stimmte mit der Apache 2.4-Dokumentation überein. Aber ich habe folgende Erfahrung gemacht, die dieser Antwort und der Dokumentation zu widersprechen scheint. Beachten Sie die folgenden Anweisungen:

<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>

Die Absicht besteht offensichtlich darin, alle URLs mit einer HTTP-Basisauthentifizierung zu schützen.außerfür URLs unterhalb von /wp/feed. Aber nachdem ich Apache neu geladen hatte, wurde ich beim Aufrufen von zur Eingabe der Anmeldeinformationen aufgefordert /wp/feed. Diese URL stimmt mit beiden Standortpfaden überein, also hätte Apache Require valid-usergefolgt von verarbeiten müssen Require all grantedund ich hätte nicht dazu aufgefordert werden dürfen. Nur aus „Spaß“ habe ich versucht, die Reihenfolge der Standortblöcke zu ändern, wurde aber trotzdem dazu aufgefordert. Das Einzige, was wie beabsichtigt funktionierte, war, den Standortblock für „/“ vollständig zu entfernen. Für mich war das auch ein unerwartetes Verhalten, da es in diesem Fall Require valid-userüberhaupt keine Anweisungen gab, die auf URLs angewendet werden sollten, die nicht mit übereinstimmten /wp/feed. Und trotzdem wurden sie angewendet, da ich für alle URLs dazu aufgefordert wurde, die nicht mit übereinstimmten /wp/feed.

Kann das jemand erklären? Verpasse ich einfach den Anschluss beim Verständnis der Antwort undDokumentation?

Ich hatte keine Probleme, dieses Verhalten mit Nginx-Direktiven anzugeben, bei denen im Allgemeinen die längste Präfixübereinstimmung gewinnt. Wenn das, was ich erhalten habe, wirklich das erwartete Verhalten ist, wie kann ich dann mit Apache das gewünschte Verhalten erzielen?

verwandte Informationen