htaccess deny parent par défaut, autorise un seul sous-chemin virtuel regex
Je veux refuser tous les utilisateurs anonymes par défaut tout en autorisant les utilisateurs anonymes pour un chemin virtuel spécifique; le chemin virtuel est créé par un wordpress htaccess + php
Configuration actuelle
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
Problème
Le code ci-dessus refuse tous les utilisateurs et demande des informations d'identification. Cependant, si je passe globalement à Allow from Allet Ifà, Deny from Allcela fonctionne comme prévu, en refusant uniquement l'itinéraire spécifié
Question
Comment puis-je autoriser des visiteurs anonymes sur mon itinéraire virtuel tout en protégeant tout le reste par mot de passe?
Réponses
Par le son, vous n'avez besoin de demander l'authentification que si le chemin URL demandé n'est pas le chemin URL que vous souhaitez autoriser l'accès public. Et autorisez simplement l'accès autrement.
Vous mélangez également dans Apache 2.2 des directives d'authentification sur ce qui semble être un système Apache 2.4.
Essayez plutôt quelque chose comme ce qui suit:
<If "%{REQUEST_URI} !~ m#^/this/urlpath/is/public/#">
AuthUserFile /var/www/domains/dev/.htpasswd
AuthType Basic
AuthName "Password Required"
Require user jackson dawna
</If>
Ce qui précède vérifie que l'URL demandée ne démarre pas /this/urlpath/is/public/(il vous manquait une ancre de début de chaîne ^dans votre exemple) et ne demande l'authentification que si ce n'est pas le cas. L'action par défaut est alors d'autoriser l'accès (pour toute URL commençant par ce chemin d'URL).
En raison de la nature du chemin virtuel (créé par wordpress), j'ai dû utiliser à la THE_REQUESTplace:
<If "%{THE_REQUEST} =~ m#^GET /sites/dawna/wordpress/wp-json/#">
Allow from All
Satisfy Any
</If>
La redirection wordpress utilise wordpress/index.phpdonc l'utilisation de REQUEST_URIne fonctionnait pas car l'URI /path/to/wordpress/index.phprend toujours l'instruction my if inutile.
REMARQUE
Si vous avez besoin de prendre en charge les PUT ou autres, vous devrez l'ajouter. [A-Z]{3}Ou [A-Z]{3-6}où ce dernier s'ouvrira à tout.