Protection par mot de passe D'une URL spécifique

le site est sur l'hébergement partagé. Je dois protéger par mot de passe une URL unique.

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

évidemment ce n'est pas un chemin de fichier physique que j'essaie de protéger, c'est juste cette URL particulière.

toute solution rapide avec .htaccess?

26
demandé sur Jan Hančič 2013-01-30 16:04:28

7 réponses

vous devriez pouvoir le faire en utilisant la combinaison de mod_env et de Satisfy any la directive. Vous pouvez utiliser SetEnvIf à vérifier par rapport à la Request_URI, même si ce n'est pas un chemin d'accès physique. Vous pouvez ensuite vérifier si la variable est définie dans Allow déclaration. Alors soit vous devez vous connecter avec mot de passe, soit le Allow vous permet d'entrer sans mot de passe:

# 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
55
répondu Jon Lin 2013-01-30 13:20:56

Vous pouvez utiliser <LocationMatch> ou tout simplement <Location> à l'intérieur de votre <VirtualHost> directive pour faire ceci (en supposant que vous avez accès à votre httpd.conf / vhost.conf-alternativement vous pouvez mettre quelque chose de similaire dans un .htaccess dans votre document root si vous devez configurer votre site de cette façon).

Par exemple:

<VirtualHost *:80>
  ServerName www.example.com
  DocumentRoot /var/www/blabla
  # Other usual vhost configuration here
  <Location /pretty/url>
    AuthUserFile /path/to/.htpasswd
    AuthGroupFile /dev/null
    AuthName "Password Protected"
    AuthType Basic
    require valid-user
  </Location>
</VirtualHost>

Vous pourriez trouver <LocationMatch> plus utile si vous voulez faire correspondre une expression régulière à votre jolie URL. La documentation est ici.

14
répondu Coder 2014-11-17 19:22:54

toutes les solutions fournies n'ont pas fonctionné pour moi. J'ai compris à la suite des directives faire l'affaire:

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
4
répondu Stefan 2016-08-10 12:41:20
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

<RequireAny>
  Require env noauth
  Require valid-user
</RequireAny>

si vous avez besoin de support pour Apache 2.2 et Apache 2.4 (apparemment il y a des configurations où les deux versions fonctionnent en parallèle...):

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

<IfModule mod_authz_core.c>
    <RequireAny>
        Require env noauth
        Require valid-user
    </RequireAny>
</IfModule>

<IfModule !mod_authz_core.c>
    Order Deny,Allow
    Deny from all
    Satisfy any
    Require valid-user
    Allow from env=noauth
</IfModule>

le code D'Apache 2.2 est tiré de Jon Lin.

4
répondu Pharaoh 2017-08-02 13:13:13
#
# 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

<RequireAll>
  # require the auth variable to be set
  Require env auth
  # require an valid-user
  Require valid-user
</RequireAll>
0
répondu simne7 2015-10-06 18:28:42

quid de rediriger l'utilisateur vers un sous-dossier protégé par mot de passe?

.htaccess

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

protégé/.htaccess

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

protégé/.htpasswd

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

protégé / login.php

<?php
if (isset($_GET['url']) && $_GET['url'] && $_GET['url'][0] != '/' && strpos($_GET['url'], '//') === false) {
    setcookie('BadHorsie', 'secret_cookie_key', 0, '/');
    header('Location: /' . $_GET['url'], true, 307);
    exit;
}
?>

Ce qui se passe

  1. demandes des utilisateurs example.com/pretty/url
  2. 307 rediriger vers example.com/protected/login.php?url=pretty/url
  3. login
  4. sur le succès: l'utilisateur obtient le cookie de session avec secret clé
  5. 307 de redirection example.com/pretty/url
  6. L'utilisateur obtient du contenu secret

Note: Bien sûr, le mécanisme "cookie de session et rétro-redirection" est entièrement optionnel. Enfin, vous pouvez servir votre contenu secret directement à travers protected/login.php. J'ai montré ce chemin seulement pour l'inspiration.

optionnel: N'utilisez PAS PHP et passez le cookie .htaccess.

0
répondu mgutt 2017-02-23 23:50:00

la solution ci-dessus est trop occupé et foiré un peu.. J'ai opter pour la simplicité et la clarté comme ceci

<Files "protected.html">
 AuthName "Username and password required"
 AuthUserFile /home/fullpath/.htpasswd
 Require valid-user
 AuthType Basic
</Files>

ce qui précède doit être mis dans votre fichier htaccess où le "protégé.html" est le fichier que vous souhaitez protéger (il peut être tout ce que vous souhaitez, par exemple myphoto.jpg ou un document.zip, il suffit de le renommer à votre préférence). Le fichier AuthUserFile est le chemin complet vers votre fichier de mots de passe. Vous êtes fait.

bien que vous pourriez avoir à vous assurer les pré-requis pour ce sont fixés. AllowOverride et AuthConfig sont nécessaires dans les fichiers Apache directory tag configs pour que le code fonctionne, mais normalement il est prédéfini dans la boîte, donc vous devriez être en sécurité, sauf si vous faites votre propre compilation personnalisée.

-1
répondu Dennis 2013-05-24 14:40:05