htaccess exclui uma url da autenticação básica

Eu preciso excluir um URL (ou melhor ainda um prefixo) da proteção de autenticação básica de htaccess normal. Algo como / callbacks / myBank ou / callbacks /. * Você tem alguma dica de como fazer isso?

O que não estou procurando é como excluir um arquivo. Isso tem que ser url (já que esta é uma solução baseada em framework PHP, e todos os urls são redirecionados com mod_rewrite para index.php). Portanto, não há arquivo sob este URL. Nada.

Alguns desses URLs são apenas retornos de chamada de outros serviços (Nenhum IP não é conhecido, portanto, não posso excluir com base no IP) e eles não podem solicitar Usuário / Senha.

A definição atual é tão simples quanto:

AuthName "Please login." AuthGroupFile /dev/null AuthType Basic AuthUserFile /xxx/.htpasswd require valid-user 

    Se você estiver usando o Apache 2.4, as soluções alternativas SetEnvIf e mod_rewrite não serão mais necessárias, já que a diretiva Require é capaz de interpretar expressões diretamente:

     AuthType Basic AuthName "Please login." AuthUserFile "/xxx/.htpasswd" Require expr %{REQUEST_URI} =~ m#^/callbacks/.*# Require valid-user 

    Tratamentos do Apache 2.4 Require diretivas que não são agrupadas por como se estivessem em um , que se comporta como uma instrução “ou”. Aqui está um exemplo mais complicado que demonstra a correspondência entre o URI de solicitação e a string de consulta e a necessidade de um usuário válido:

     AuthType Basic AuthName "Please login." AuthUserFile "/xxx/.htpasswd"   # I'm using the alternate matching form here so I don't have # to escape the /'s in the URL. Require expr %{REQUEST_URI} =~ m#^/callbacks/.*# # You can also match on the query string, which is more # convenient than SetEnvIf. #Require expr %{QUERY_STRING} = 'secret_var=42'  Require valid-user  

    Este exemplo permitiria access a /callbacks/foo?secret_var=42 mas exigiria um nome de usuário e senha para /callbacks/foo .

    Lembre-se de que, a menos que você use , o Apache tentará corresponder cada Require na ordem, então pense em quais condições você deseja permitir primeiro.

    A referência para a diretiva Require está aqui: https://httpd.apache.org/docs/2.4/mod/mod_authz_core.html#require

    E a referência de expressão está aqui: https://httpd.apache.org/docs/2.4/expr.html

    Usando SetEnvIf , você pode criar uma variável quando a solicitação iniciar com algum caminho e, em seguida, usar a diretiva Satisfy Any para evitar o login.

     # set an environtment variable "noauth" if the request starts with "/callbacks/" SetEnvIf Request_URI ^/callbacks/ noauth=1 # the auth block AuthName "Please login." AuthGroupFile /dev/null AuthType Basic AuthUserFile /xxx/.htpasswd # Here is where we allow/deny Order Deny,Allow Satisfy any Deny from all Require valid-user Allow from env=noauth 

    O pedaço de permissão / negação de diretivas diz que negar access para TODOS , exceto quando há um usuário válido (login de autenticação BASIC bem sucedido) ou se a variável noauth estiver configurada.

    Essa solução funciona muito bem, você só precisa definir a lista de permissions que deseja passar.

     SetEnvIfNoCase Request_URI "^/status\.php" noauth AuthType Basic AuthName "Identify yourself" AuthUserFile /path/to/.htpasswd Require valid-user Order Deny,Allow Deny from all Allow from env=noauth Satisfy any 

    Eu tentei as outras soluções, mas isso é o que funcionou para mim. Espero que seja de ajuda para os outros.

     # Auth stuff AuthName "Authorized personnel only." AuthType Basic AuthUserFile /path/to/your/htpasswd/file SetEnvIf Request_URI "^/index.php/api/*" allow Order allow,deny Require valid-user Allow from env=allow Deny from env=!allow Satisfy any 

    Isso permitirá que a URL api e qualquer string de url depois de /index.php/api/ abrir sem ter que fazer o login e qualquer outra coisa será solicitada para login.

    Exemplo:

    mywebsite.com/index.php/api será aberto sem ser solicitado a fazer o login mywebsite.com/index.php/api/soap/?wsdl=1 será aberto sem ser solicitado a fazer o login mywebsite.com será solicitado a fazer o login primeiro

    Outra abordagem funciona assim, se a área que você está protegendo tiver um script PHP monolítico controlando tudo, como o WordPress. Configure a Autenticação com um diretório diferente. Coloque um index.php lá que define um cookie no caminho ‘/’. Em seguida, no WordPress (por exemplo), verifique o cookie, mas ignore a verificação se $ _SERVER [‘REQUEST_URI’] for o URL excluído.

    Na minha plataforma de hospedagem compartilhada, o RewriteRule não pôde definir uma variável de ambiente que funcionasse com “Satisfazer qualquer”.

    Com qualquer abordagem, observe que a página que você está protegendo não inclui imagens, folhas de estilo, etc., que acionam uma solicitação de autenticação quando a própria página não o faz.

      SetEnvIf Request_URI "/callback/.*" REDIRECT_noauth=1 AuthType Basic AuthName "Restricted Files" AuthUserFile /etc/httpd/passwords/passwords Order Deny,Allow Satisfy any Deny from all Allow from env=REDIRECT_noauth Require user yournickname  

    Adicione o código abaixo ao seu arquivo htaccess raiz e não se esqueça de alterar sua url de administração, página de arquivo .htpasswd.

      AuthName "Cron auth" AuthUserFile E:\wamp\www\mg\.htpasswd AuthType basic Require valid-user  

    Crie o arquivo .htpasswd na sua pasta raiz e adicione abaixo o nome de usuário e a senha (defina o nome de usuário padrão: admin e senha: admin123)

     admin:$apr1$8.nTvE4f$UirPOK.PQqqfghwANLY47. 

    Por favor, deixe-me saber se você ainda está enfrentando algum problema.

    por que você não usa apenas a autenticação básica da maneira que foi planejada?

     user:password@domain.com/callbacks/etc