我需要通过.htaccess
密码保护.htpasswd
中的许多漂亮网址。但我想为每个受保护的漂亮URL(以及未经特别保护的页面的常规登录)提供不同的用户/登录。
所以,例如,我想保护:
使用特定的用户/密码:
http://www.example.com/pretty/url
使用其他用户/密码:
http://www.example.com/pretty/link
使用通用用户/密码(所有其他用户)
http://www.example.com/pretty/generic
http://www.example.com/pretty/all
http://www.example.com/pretty/
我试图使用this answer中的代码,我发现它最适合我的需求:
# 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
使用一个漂亮的URL可以很好地工作。但是,我无法通过htpasswd
找到一种方法来使用不同的用户对每个网址进行调整。
答案 0 :(得分:2)
只需通过php发送身份验证标头,然后会弹出身份验证窗口。在您的代码中,您可以检查不同的用户并请求uris。在此示例中,它仅检查用户,但您也可以比较REQUEST_URI或PARAMS。它应该只显示这个概念。
<?php
if (!isset($_SERVER['PHP_AUTH_USER'])) {
header("WWW-Authenticate: Basic realm=\"Private Area\"");
header("HTTP/1.0 401 Unauthorized");
print "Sorry - you need valid credentials to be granted access!\n";
exit;
} else {
if (preg_match('/^\/pretty\/url/', $_SERVER["REQUEST_URI"], $matches) && $_SERVER['PHP_AUTH_USER'] == 'paul') {
print "Welcome to the private area!";
} else {
header("WWW-Authenticate: Basic realm=\"Private Area\"");
header("HTTP/1.0 401 Unauthorized");
print "Sorry - you need valid credentials to be granted access!\n";
exit;
}
}
?>