Senha protege um URL específico

O site está em hospedagem compartilhada. Eu preciso proteger com senha uma única URL.

http://www.example.com/pretty/url 

Obviamente, esse não é um caminho de arquivo físico que estou tentando proteger, é apenas esse URL específico.

Qualquer solução rápida com .htaccess?

Você deve conseguir fazer isso usando a combinação de mod_env e a diretiva Satisfy any . Você pode usar SetEnvIf para verificar o Request_URI , mesmo que não seja um caminho físico. Você pode então verificar se a variável está definida em uma instrução Allow . Então, você precisa fazer o login com a senha ou o Allow permite Allow sem senha:

 # Do the regex check against the URI here, if match, set the "require_auth" var SetEnvIf Request_URI ^/pretty/url require_auth=true # Auth stuff AuthUserFile /var/www/htpasswd AuthName "Password Protected" AuthType Basic # Setup a deny/allow Order Deny,Allow # Deny from everyone Deny from all # except if either of these are satisfied Satisfy any # 1. a valid authenticated user Require valid-user # or 2. the "require_auth" var is NOT set Allow from env=!require_auth 

Você pode usar ou simplesmente dentro de sua para fazer isso (assumindo que você tenha access ao seu httpd.conf / vhost.conf – alternativamente você poderia colocar algo similar em um .htaccess no seu documento root se você tem que configurar seu site dessa maneira).

Por exemplo:

  ServerName www.example.com DocumentRoot /var/www/blabla # Other usual vhost configuration here  AuthUserFile /path/to/.htpasswd AuthGroupFile /dev/null AuthName "Password Protected" AuthType Basic require valid-user   

Você pode achar mais útil se quiser corresponder uma expressão regular ao seu URL bonito. A documentação está aqui .

Todas as soluções fornecidas não funcionaram para mim. Eu descobri que as diretrizes seguintes fazem o truque:

 SetEnvIf Request_URI ^/page-url auth=1 AuthName "Please login" AuthType Basic AuthUserFile "/www/live.example.com/files/html/.htpasswd" # first, allow everybody Order Allow,Deny Satisfy any Allow from all Require valid-user # then, deny only if required Deny from env=auth 

Como Rick afirmou em um comentário que nenhuma resposta nesta pergunta funciona, aqui está o trecho que eu uso:

 AuthName "Protected Area" AuthType Basic AuthUserFile /path/to/your/.htpasswd AuthGroupFile /dev/null SetEnvIf Request_URI .* noauth SetEnvIf Request_URI the_uri_you_want_to_protect !noauth SetEnvIf Request_URI another_uri !noauth SetEnvIf Request_URI add_as_many_as_you_want !noauth  Require env noauth Require valid-user  

Se você precisar de suporte para o Apache 2.2 e Apache 2.4 (aparentemente existem configurações onde ambas as versões rodam em paralelo …):

 AuthName "Protected Area" AuthType Basic AuthUserFile /path/to/your/.htpasswd AuthGroupFile /dev/null SetEnvIf Request_URI .* noauth SetEnvIf Request_URI the_uri_you_want_to_protect !noauth SetEnvIf Request_URI another_uri !noauth SetEnvIf Request_URI add_as_many_as_you_want !noauth   Require env noauth Require valid-user    Order Deny,Allow Deny from all Satisfy any Require valid-user Allow from env=noauth  

O código para o Apache 2.2 é retirado de Jon Lin .

Infelizmente não posso comentar sobre a resposta do @jon-lin. Então, eu crio uma nova resposta. Minha solução adaptada em um ambiente do Apache 2.4 é:

 # # password protect /pretty/url URIs # AuthType Basic AuthName 'Authentication required' AuthUserFile /path/to/.htpasswd # Restrict access to some urls SetEnvIf Request_URI ^/pretty/url auth=1  # require the auth variable to be set Require env auth # require an valid-user Require valid-user  

Que tal redirect o usuário para uma subpasta protegida por senha?

.htaccess

 RewriteCond %{HTTP_COOKIE} !BadHorsie=secret_cookie_key RewriteRule ^(pretty/url)$ /protected/login.php?url=$1 [R=307,L] 

protegido / .htaccess

 AuthUserFile /usr/www/{YOUR_PATH}/protected/.htpasswd AuthGroupFile /dev/null AuthName "Protected" AuthType Basic require user BadHorsie 

protegido / .htpasswd

 BadHorsie:$apr1$fFbaaVdF$Q5ql58g7R4qlpMUDb/5A0/ 

protected / login.php

  

O que acontece

  1. Solicitações do usuário example.com/pretty/url
  2. 307 redirect para example.com/protected/login.php?url=pretty/url
  3. entrar
  4. no sucesso: o usuário obtém cookie de session com chave secreta
  5. 307 redirect de volta para example.com/pretty/url
  6. O usuário obtém conteúdo secreto

Nota: É claro que o mecanismo “session cookie e back-redirecting” é totalmente opcional. Finalmente você poderia servir seu conteúdo secreto diretamente através do protected/login.php . Eu mostrei isso apenas como inspiração.

Opcional: Não use PHP e configure o cookie por meio do .htaccess.

a solução acima está muito ocupada e bagunçada um pouco .. Eu vou para simplicidade e clareza como esta

  AuthName "Username and password required" AuthUserFile /home/fullpath/.htpasswd Require valid-user AuthType Basic  

O acima é para ser colocado em seu arquivo htaccess onde o “protected.html” é o arquivo que você deseja proteger (pode ser qualquer coisa que você desejar, por exemplo myphoto.jpg ou um document.zip, apenas renomeie-o para o seu preferência). O AuthUserFile é o caminho completo para o seu arquivo de senha. Você terminou.

Embora seja necessário certificar-se de que os pré-requisitos para isso estão definidos. AllowOverride e AuthConfig são necessários nas configurações de tag do diretório Apache para que o código funcione, mas normalmente ele é pré-configurado fora da checkbox, portanto, você deve estar seguro e protegido, a menos que esteja fazendo sua própria compilation personalizada.