htaccess deniega el padre de forma predeterminada, permite una subruta virtual de expresión regular única

htaccess deniega el padre de forma predeterminada, permite una subruta virtual de expresión regular única

Quiero negar a todos los usuarios anónimos de forma predeterminada pero permitir a los usuarios anónimos una ruta virtual específica; la ruta virtual es creada por un wordpress htaccess + php

Configuración actual

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

El código anterior niega a todos los usuarios y solicita credenciales. Sin embargo, si cambio global a Allow from Ally Ifa Deny from All, esto funciona como se esperaba, solo niega la ruta especificada.

Pregunta

¿Cómo puedo permitir que visitantes anónimos accedan a mi ruta virtual y al mismo tiempo proteger todo lo demás con contraseña?

Respuesta1

Por lo que parece, solo necesita solicitar autenticación si la ruta URL solicitada esnola ruta URL que desea permitir el acceso público. Y simplemente permita el acceso en caso contrario.

También está mezclando directivas de autenticación de Apache 2.2 en lo que parecería ser un sistema Apache 2.4.

Pruebe algo como lo siguiente en su lugar:

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

Lo anterior verifica que la URL solicitada no comience /this/urlpath/is/public/(en su ejemplo le faltaba un ancla de inicio de cadena ^) y solo solicita autenticación si no es así. La acción predeterminada es entonces permitir el acceso (para cualquier URL que comience con esa ruta URL).

Respuesta2

Debido a la naturaleza de la ruta virtual (creada por wordpress), tuve que usar THE_REQUESTen su lugar:

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

La redirección de WordPress utiliza, wordpress/index.phppor lo que el uso de REQUEST_URIno funcionaba porque el URI siempre /path/to/wordpress/index.phphace que la declaración my if sea inútil.

NOTA

Si necesita admitir PUT u otros, deberá agregarlos [A-Z]{3}o [A-Z]{3-6}donde este último se abrirá a todo.

información relacionada