
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 All
y If
a 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_REQUEST
en 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.php
por lo que el uso de REQUEST_URI
no funcionaba porque el URI siempre /path/to/wordpress/index.php
hace 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.