Eu 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, apenas negando a rota especificada
Pergunta
Como posso permitir visitantes anônimos na minha rota virtual enquanto protejo todo o resto por senha?
Ao que parece, você só precisa solicitar autenticação se o caminho de URL solicitado não for o caminho de URL que você deseja permitir o acesso público. E simplesmente permita o acesso de outra forma.
Você também está misturando diretivas de autenticação do Apache 2.2 no que parece ser um sistema Apache 2.4.
Tente algo como o seguinte em vez disso:
O acima verifica se a URL solicitada não inicia
/this/urlpath/is/public/
(você estava faltando uma âncora de início de string^
em seu exemplo) e só solicita autenticação se não for. A ação padrão é permitir o acesso (para qualquer URL que comece com esse caminho de URL).Devido à natureza do caminho virtual (criado pelo wordpress), tive que usar
THE_REQUEST
:O redirecionamento do wordpress usa
wordpress/index.php
então o uso doREQUEST_URI
não estava funcionando porque o uri está sempre/path/to/wordpress/index.php
tornando a instrução my if inútil.NOTA
Se você precisar suportar PUT's ou outros, terá que adicionar isso.
[A-Z]{3}
ou[A-Z]{3-6}
onde o último se abrirá para tudo.