
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 solicita credenciais. No entanto, se eu mudar global para Allow from All
e If
para Deny from All
, isso funcionará conforme o esperado, negando apenas a rota especificada
Pergunta
Como posso permitir visitantes anônimos em minha rota virtual e, ao mesmo tempo, proteger todo o resto com senha?
Responder1
Pelo que parece, você só precisa solicitar autenticação se o caminho da URL solicitada fornãoo caminho da 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.
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 o URL solicitado não inicia /this/urlpath/is/public/
(faltava uma âncora de início de string ^
no seu exemplo) e apenas solicita autenticação se isso não acontecer. A ação padrão é permitir o acesso (para qualquer URL que comece com esse caminho de URL).
Responder2
Devido à natureza do caminho virtual (criado pelo wordpress), tive que usar THE_REQUEST
:
<If "%{THE_REQUEST} =~ m#^GET /sites/dawna/wordpress/wp-json/#">
Allow from All
Satisfy Any
</If>
O redirecionamento do wordpress usa wordpress/index.php
então o uso do REQUEST_URI
não estava funcionando porque o uri está sempre /path/to/wordpress/index.php
tornando a instrução my if inútil.
OBSERVAÇÃO
Se você precisar oferecer suporte a PUTs ou outros, terá que adicioná-los. [A-Z]{3}
Ou [A-Z]{3-6}
onde o último se abrirá para tudo.