htaccess nega genitore per impostazione predefinita, consente un singolo sottopercorso virtuale regex

Jul 19 2019

Desidero negare tutti gli utenti anonimi per impostazione predefinita ma consentire agli utenti anonimi per un percorso virtuale specifico; il percorso virtuale è creato da un wordpress htaccess + php

Configurazione corrente

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

Problema

Il codice precedente nega tutti gli utenti e richiede le credenziali. Tuttavia, se cambio globale su Allow from Alle Ifsu, Deny from Allfunziona come previsto, negando solo il percorso specificato

Domanda

Come posso consentire ai visitatori anonimi di accedere al mio percorso virtuale mentre tutto il resto è protetto da password?

Risposte

MrWhite Jul 19 2019 at 19:20

A quanto pare, devi solo chiedere l'autenticazione se il percorso URL richiesto non è il percorso URL a cui vuoi consentire l'accesso pubblico. E semplicemente consentire l'accesso altrimenti.

Stai anche mescolando le direttive auth di Apache 2.2 su quello che sembrerebbe essere un sistema Apache 2.4.

Prova invece qualcosa di simile:

<If "%{REQUEST_URI} !~ m#^/this/urlpath/is/public/#">
    AuthUserFile /var/www/domains/dev/.htpasswd
    AuthType Basic
    AuthName "Password Required"
    Require user jackson dawna
</If>

Quanto sopra controlla che l'URL richiesto non si avvii /this/urlpath/is/public/( ^nel tuo esempio mancava un'ancora di inizio stringa ) e richiede l'autenticazione solo in caso contrario. L'azione predefinita è quindi consentire l'accesso (per qualsiasi URL che inizia con quel percorso URL).

Jacksonkr Jul 20 2019 at 02:54

A causa della natura del percorso virtuale (creato da wordpress) ho dovuto usare THE_REQUESTinvece:

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

Il reindirizzamento di wordpress usa wordpress/index.phpquindi l'uso di REQUEST_URInon funzionava perché l'uri rende sempre /path/to/wordpress/index.phpinutile l'istruzione my if.

NOTA

Se hai bisogno di supportare PUT o altro, dovrai aggiungerlo. [A-Z]{3}O [A-Z]{3-6}dove quest'ultimo si aprirà a tutto.