htaccess permite una ruta específica

htaccess permite una ruta específica

Actualmente, htaccess niega a todos los usuarios. Solo quiero permitir que todos los usuarios puedan acceder al feed JSON de WordPress.

Desde la ubicación del archivo htaccess, la URL del feed es:

./row/wordpress/wp-json/wp/v2/screen

Pregunta

Por lo que tengo entendido, esta es una URL "virtual" creada mediante reglas de reescritura. Dado que no es un archivo real sino solo un punto final, ¿cómo puedo permitir que cualquier usuario acceda a él?

Intento actual

Aquí está mi intento actual que bloquea a todos los usuarios sin contraseña. Mi Filesnodo no hace nada.

// root folder's .htaccess

AuthUserFile /var/www/domains/dev/.htpasswd
AuthType Basic
AuthName "Password Required"
Require user SecretUser
Order Deny,Allow
Deny from All

<Files "row/wordpress/wp-json/wp/v2/screen">
    Allow from all
</Files>

Satisfy Any       

Pregunta

¿Cómo puedo hacer que la ruta virtual ./row/wordpress/wp-json/wp/v2/screensea visible para todos mis visitantes?

** editar **

Desde entonces he probado ambos

<Directory row/wordpress/wp-json/v2/>
    Allow from All
</Directory>

<Location row/wordpress/wp-json/v2/>
    Allow from All
</Location>

Sin éxito, ambos provocan un 501.

Respuesta1

Aquí hay dos enfoques diferentes para permitir que una única URL, ya sea que se refiera a un archivo físico o no, omita la autenticación de contraseña básica:

Opción 1: Permitir una única URL a través de la protección con contraseña:

AuthType Basic
AuthName "Password Required"
AuthUserFile /var/www/domains/dev/.htpasswd
Require expr %{REQUEST_URI} == '/row/wordpress/wp-json/wp/v2/screen'
Require user SecretUser

Opción 2: aplicar protección con contraseña a todas las solicitudes que no coincidan con una URL específica (esta opción requiere Apache 2.4):

<If "%{REQUEST_URI} != '/row/wordpress/wp-json/wp/v2/screen'">
    AuthType Basic
    AuthName "Password Required"
    AuthUserFile /var/www/domains/dev/.htpasswd
    Require user SecretUser
</If>

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