我想允许基本身份验证,但不要求这样做。所有访问者(无论是否经过身份验证)都应该能够访问页面(脚本),脚本可以在其中为有效用户添加特殊功能。因此,首先尝试基本身份验证,如果失败,无论如何都允许访问。脚本将决定下一步做什么。我宁愿不在脚本内进行整个身份验证,而是让 apache 进行身份验证,并将用户名(如果有)传递给脚本。
我实际上是在创建一个 SOAP 服务,而不是一个网站,但您可以想象这样一种情况:您可以访问某个网站的主页,而无需输入用户名/密码,然后访问一个仅供会员使用的页面,这将触发 http 身份验证。现在,再次访问该主页可以得到一个个性化的主页。
我一直在摆弄 .htaccess 文件并得到以下结果:
AuthType Basic
AuthName "Beveiligde website"
AuthUserFile .htpasswd
require valid-user
Order allow,deny
Allow from All
satisfy any
这确实允许所有,但不幸的是不要首先尝试身份验证(至少据我所知不是)。即使使用了有效的凭据,PHP 中的环境变量 AUTH_TYPE 也为空。
是否可以通过这种方式将它们结合起来?我可以想象,当允许/拒绝规则导致拒绝时,apache 只会尝试基本身份验证。有没有办法强制进行基本身份验证?还是我完全用错了方法?
答案1
你需要有点技巧:) 来制作服务器问为了进行身份验证,您需要要求一个有效的用户。但这可以放在地点阻止。所以我在想,你可以将该位置别名(或重定向)到正常位置。我认为类似这样的方法可以奏效:
<location "/try-auth-first">
require valid-user
satisfy all
alias /try-auth-first /the-real-one
#redirect /try-auth-first /the/real/one
</location>
您可能需要稍微调整一下,但类似的东西应该可以工作。如果身份验证失败,您的脚本可以获取 401 结果,然后直接重试到真实位置(需要设置为允许所有位置)。
答案2
命令拒绝,允许也许是解决方案。
Order deny,allow
Deny from all
我不检查。