htaccess deny parent par défaut, autorise un seul sous-chemin virtuel regex

Jul 19 2019

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

MrWhite Jul 19 2019 at 19:20

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

Jacksonkr Jul 20 2019 at 02:54

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.