
Ich möchte standardmäßig alle anonymen Benutzer ablehnen, aber anonyme Benutzer für einen bestimmten virtuellen Pfad zulassen. Der virtuelle Pfad wird durch ein WordPress-HTAccess + PHP erstellt.
Aktuelles Setup
AuthUserFile /var/www/domains/dev/.htpasswd
AuthType Basic
AuthName "Password Required"
Require user jackson dawna
Order Deny,Allow
Deny from All
<If "%{REQUEST_URI} =~ m#/sites/dawna/wordpress/wp-json/wp/v2/.*#">
Order Allow,Deny
Allow from All
Satisfy Any
</If>
Satisfy Any
Problem
Der obige Code lehnt alle Benutzer ab und verlangt Anmeldeinformationen. Wenn ich jedoch global auf Allow from All
und If
dann auf umschalte Deny from All
, funktioniert dies wie erwartet und verweigert nur die angegebene Route.
Frage
Wie kann ich anonymen Besuchern den Zugriff auf meine virtuelle Route gestatten und gleichzeitig alles andere durch ein Passwort schützen?
Antwort1
So wie es klingt, müssen Sie nur dann eine Authentifizierung anfordern, wenn der angeforderte URL-Pfadnichtder URL-Pfad, für den Sie den öffentlichen Zugriff zulassen möchten. Und erlauben Sie andernfalls einfach den Zugriff.
Sie mischen außerdem Apache 2.2-Authentifizierungsdirektiven in ein System ein, das wie ein Apache 2.4-System aussieht.
Versuchen Sie stattdessen etwas wie das Folgende:
<If "%{REQUEST_URI} !~ m#^/this/urlpath/is/public/#">
AuthUserFile /var/www/domains/dev/.htpasswd
AuthType Basic
AuthName "Password Required"
Require user jackson dawna
</If>
Oben wird überprüft, ob die angeforderte URL nicht beginnt /this/urlpath/is/public/
(in Ihrem Beispiel fehlte ein Start-of-String-Anker ^
) und nur dann wird zur Authentifizierung aufgefordert, wenn dies nicht der Fall ist. Die Standardaktion besteht dann darin, den Zugriff zuzulassen (für jede URL, die mit diesem URL-Pfad beginnt).
Antwort2
Aufgrund der Art des virtuellen Pfads (erstellt von WordPress) musste ich THE_REQUEST
stattdessen Folgendes verwenden:
<If "%{THE_REQUEST} =~ m#^GET /sites/dawna/wordpress/wp-json/#">
Allow from All
Satisfy Any
</If>
Die WordPress-Umleitung funktionierte wordpress/index.php
also REQUEST_URI
nicht, da die URI /path/to/wordpress/index.php
meine if-Anweisung immer unbrauchbar machte.
NOTIZ
Wenn Sie PUTs oder anderes unterstützen müssen, müssen Sie das hinzufügen. [A-Z]{3}
Oder [A-Z]{3-6}
wo Letzteres für alles geöffnet wird.