htaccess nega pai por padrão, permite subcaminho virtual regex único
Quero negar todos os usuários anônimos por padrão, mas permitir usuários anônimos para um caminho virtual específico; o caminho virtual é criado por um wordpress htaccess + php
Configuração atual
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
O código acima nega todos os usuários e pede credenciais. No entanto, se eu alternar global para Allow from Alle Ifpara Deny from All, isso funcionará como esperado, apenas negando a rota especificada
Questão
Como posso permitir que visitantes anônimos acessem minha rota virtual enquanto faço tudo o mais protegido por senha?
Respostas
Pelo que parece, você só precisa pedir autenticação se o caminho de URL solicitado não for o caminho de URL que você deseja permitir acesso público. E simplesmente permita o acesso de outra forma.
Você também está misturando as diretivas de autenticação do Apache 2.2 no que parece ser um sistema Apache 2.4.
Em vez disso, tente algo como o seguinte:
<If "%{REQUEST_URI} !~ m#^/this/urlpath/is/public/#">
AuthUserFile /var/www/domains/dev/.htpasswd
AuthType Basic
AuthName "Password Required"
Require user jackson dawna
</If>
O procedimento acima verifica se a URL solicitada não inicia /this/urlpath/is/public/(faltou uma âncora de início de string ^em seu exemplo) e somente solicita autenticação se não iniciar . A ação padrão é então permitir o acesso (para qualquer URL que comece com aquele caminho de URL).
Devido à natureza do caminho virtual (criado pelo wordpress), tive que usar em seu THE_REQUESTlugar:
<If "%{THE_REQUEST} =~ m#^GET /sites/dawna/wordpress/wp-json/#">
Allow from All
Satisfy Any
</If>
O redirecionamento do wordpress usa, wordpress/index.phpportanto, o uso do REQUEST_URInão estava funcionando porque o uri está sempre /path/to/wordpress/index.phptornando a instrução my if inútil.
NOTA
Se precisar de suporte para PUTs ou outro, você terá que adicioná-lo. [A-Z]{3}Ou [A-Z]{3-6}onde o último abrirá para tudo.