在我的服务器上,我有以下.htaccess文件:
DirectoryIndex index.php
AuthType Basic
AuthName "Password Required"
AuthUserFile /var/www/webinterface/.htpasswd
Options +FollowSymLinks
Require valid-user
<Files index.php>
Satisfy any
Allow from *
</Files>
如果我请求URL“IP-ADDRESS / index.php”,一切正常,我在没有验证提示的情况下显示index.php。但是,只要我请求“IP-ADDRESS /”,浏览器就会要求我提供凭据。
为什么会这样?我错过了什么?
答案 0 :(得分:8)
尝试替换块以使用mod_setenvif来检查请求URI,而不是使用<Files>
。 mod_auth *模块优先于mod_dir,因此从/
到/index.php
的映射直到auth发生后才会发生。 Mod_setenvif将在auth之前发生。尝试:
SetEnvIf Request_URI "^/$" allow=yes
SetEnvIf Request_URI "^/index.php$" allow=yes
AuthType Basic
AuthName "Password Required"
AuthUserFile /var/www/webinterface/.htpasswd
Options +FollowSymLinks
Order Deny,Allow
Satisfy any
Deny from All
Require valid-user
Allow from env=allow
如果请求的URI完全是/
或/index.php
,则变量allow
会被设置。 Auth行之后的内容表示如果已设置变量allow
,则拒绝除有效用户或之外的所有内容。