在请求/而不是/index.php时获得“需要身份验证”

时间:2012-01-04 17:21:20

标签: apache .htaccess

在我的服务器上,我有以下.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 /”,浏览器就会要求我提供凭据。

为什么会这样?我错过了什么?

1 个答案:

答案 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,则拒绝除有效用户之外的所有内容。