1 votes

htaccess deny parent par défaut, allow single regex virtual subpath

Je veux refuser tous les utilisateurs anonymes par défaut mais autoriser les utilisateurs anonymes pour un chemin virtuel spécifique ; le chemin virtuel est créé par un htaccess + php de wordpress.

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 de global à Allow from All et le If a Deny from All alors cela fonctionne comme prévu, en refusant uniquement la route spécifiée.

Question

Comment puis-je autoriser les visiteurs anonymes à accéder à mon itinéraire virtuel tout en protégeant tout le reste par un mot de passe ?

0voto

MrWhite Points 11269

Il semble que vous ne deviez demander une authentification que si le chemin d'accès à l'URL demandé est le suivant no le chemin URL auquel vous voulez autoriser l'accès public. Sinon, il suffit d'autoriser l'accès.

Vous mélangez également des directives d'authentification Apache 2.2 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>

L'exemple ci-dessus vérifie que l'URL demandé ne commence pas par /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 elle ne l'est pas. L'action par défaut est alors d'autoriser l'accès (pour toute URL commençant par ce chemin URL).

0voto

Jacksonkr Points 445

En raison de la nature du chemin virtuel (créé par wordpress) j'ai dû utiliser THE_REQUEST à la place :

<If "%{THE_REQUEST} =~ m#^GET /sites/dawna/wordpress/wp-json/#">
        Allow from All
        Satisfy Any
</If>

La redirection wordpress utilise wordpress/index.php donc en utilisant le REQUEST_URI ne fonctionnait pas car l'uri est toujours /path/to/wordpress/index.php ce qui rend l'instruction "my if" inutile.

NOTE

Si vous devez prendre en charge les PUT ou autres, vous devrez l'ajouter. [A-Z]{3} o [A-Z]{3-6} où ce dernier s'ouvrira à tout.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X