Ochrona hasłem określonego adresu URL
Strona jest na współdzielonym hostingu. Muszę zabezpieczyć hasłem jeden adres URL.
http://www.example.com/pretty/url
Oczywiście nie jest to fizyczna ścieżka do pliku, którą próbuję chronić, tylko ten konkretny adres URL.
Dowolne szybkie rozwiązanie z .htaccess?
7 answers
Powinieneś być w stanie to zrobić używając kombinacji mod_env i dyrektywy Satisfy any
. Możesz użyć SetEnvIf
, aby sprawdzić w stosunku do Request_URI
, nawet jeśli nie jest to ścieżka fizyczna. Następnie można sprawdzić, czy zmienna jest ustawiona w instrukcji Allow
. Więc albo musisz się zalogować za pomocą hasła, albo Allow
pozwala Ci wejść bez hasła:
# 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
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-01-30 13:20:56
Możesz użyć <LocationMatch>
lub po prostu <Location>
wewnątrz twojej dyrektywy <VirtualHost>
(zakładając, że masz dostęp do swojego httpd.conf / vhost.conf-ewentualnie można umieścić coś podobnego whtaccess w katalogu głównym dokumentu, jeśli musisz skonfigurować witrynę w ten sposób).
Na przykład:
<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>
Możesz znaleźć <LocationMatch>
bardziej przydatne, jeśli chcesz dopasować Wyrażenie regularne do twojego pięknego adresu URL. Dokumentacja jest tutaj .
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-11-17 19:22:54
Wszystkie dostarczone rozwiązania nie działały dla mnie. Domyśliłem się, że następujące dyrektywy załatwiają sprawę:
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
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-08-10 12:41:20
Ponieważ Rick stwierdził w komentarzu, że żadna odpowiedź na to pytanie nie działa, oto fragment, którego używam:
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>
Jeśli potrzebujesz wsparcia dla Apache 2.2 i Apache 2.4 (najwyraźniej istnieją konfiguracje, w których obie wersje działają równolegle...):
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>
Kod Apache 2.2 pochodzi z Jon Lin .
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-08-02 13:13:13
Niestety nie mogę skomentować odpowiedzi @jon-lin. Więc tworzę nową odpowiedź. Moje zaadaptowane rozwiązanie w środowisku apache 2.4 to:
#
# 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>
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-10-06 18:28:42
A co z przekierowaniem użytkownika do podfolderu chronionego hasłem?
.htaccess
RewriteCond %{HTTP_COOKIE} !BadHorsie=secret_cookie_key
RewriteRule ^(pretty/url)$ /protected/login.php?url=$1 [R=307,L]
Protected/.htaccess
AuthUserFile /usr/www/{YOUR_PATH}/protected/.htpasswd
AuthGroupFile /dev/null
AuthName "Protected"
AuthType Basic
require user BadHorsie
Protected/.htpasswd
BadHorsie:$apr1$fFbaaVdF$Q5ql58g7R4qlpMUDb/5A0/
Protected / 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;
}
?>
Co się dzieje
- żądania użytkowników
example.com/pretty/url
- 307 przekierowanie do
example.com/protected/login.php?url=pretty/url
- login
- na sukces: użytkownik uzyskuje plik cookie sesji z tajnym kluczem
- 307 redirect back to
example.com/pretty/url
- Użytkownik uzyskuje tajemnicę content
Uwaga: oczywiście mechanizm "session cookie and back-redirecting" jest w pełni opcjonalny. W końcu możesz serwować swoje tajne treści bezpośrednio przez protected/login.php
. Pokazałem tę drogę tylko dla inspiracji.
Opcjonalnie: nie Używaj PHP i Ustaw plik cookie .htaccess.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-02-23 23:50:00
Powyższe rozwiązanie jest zbyt zajęte i trochę popaprane.. Stawiam na prostotę i klarowność w ten sposób
<Files "protected.html">
AuthName "Username and password required"
AuthUserFile /home/fullpath/.htpasswd
Require valid-user
AuthType Basic
</Files>
Powyższe należy umieścić w pliku htaccess, gdzie " protected.html " to plik, który chcesz chronić (może to być cokolwiek chcesz, na przykład myphoto.jpg lub dokument.zip, po prostu zmień nazwę według swoich preferencji). Plik AuthUserFile jest pełną ścieżką do pliku hasła. Jesteś skończony.
Chociaż być może będziesz musiał upewnić się, że Warunki wstępne są ustawione. AllowOverride i AuthConfig są wymagane w konfiguracjach tagów katalogu Apache, aby Kod działał, ale zwykle jest on wstępnie ustawiony po wyjęciu z pudełka, więc powinieneś być bezpieczny i w porządku, chyba że tworzysz własną, niestandardową kompilację.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-05-24 14:40:05