2012-01-04 31 views
6

我的服务器上时,我有以下.htaccess文件:得到“需要验证”请求/代替的index.php

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地址/ index.php文件”,一切工作正常,我得到的index.php没有认证提示显示。但是,一旦我请求“IP地址/”,浏览器会要求我提供我的凭据。

为什么会出现这种情况?我错过了什么?

+0

哇你真的和我完全一样的问题和设置,什么是巧合 – 2015-10-29 03:18:04

回答

7

尝试更换块以使用mod_setenvif检查请求URI而不是使用<Files>。 mod_auth *模块优先于mod_dir,因此在验证发生之前,//index.php之间的映射不会发生。 Mod_setenvif将发生在验证之前。尝试:

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被设定。如果设置了变量allow,Auth行后面的内容表示拒绝除有效用户以外的所有内容。

+0

哇,我深深的印象。这是一个伟大的激情。非常感谢 – ftiaronsem 2012-01-04 19:12:02

+0

您是否需要将以AuthType开头的块放入,等指令? – 2015-10-27 01:47:12

+0

你能帮助我理解如何做到与此相反吗?我想允许访问目录中的所有文件和子目录,但没有密码保护,但我确实需要/或/index.php的密码认证。当我用密码保护index.php文件时,我仍然可以访问/没有密码。我认为你上面的答案包含了我需要的规则来扭转上述情况,并使其适用于我的情况,但我不太了解SetEnvIf等,以便将其写出来。 – WilliamAlexander 2017-10-16 16:38:40