如何在别的禁止的Apache目录下使用基本的身份validation单个文件?

我想允许访问一个被禁止的目录中的单个文件。

这不起作用:

<VirtualHost 10.10.10.10:80> ServerName example.com DocumentRoot /var/www/html <Directory /var/www/html> Options FollowSymLinks AllowOverride None order allow,deny allow from all </Directory> # disallow the admin directory: <Directory /var/www/html/admin> order allow,deny deny from all </Directory> # but allow this single file:: <Files /var/www/html/admin/allowed.php> AuthType basic AuthName "private area" AuthUserFile /home/webroot/.htusers Require user admin1 </Files> ... </VirtualHost> 

当我访问http://example.com/admin/allowed.php我得到http://example.com/admin/目录的Forbidden消息,而不是来自基本authentication的浏览器loginpopup窗口,所以基本authentication在文件上不起作用。 我怎样才能让allowed.phpexception?

如果不可能,也许我可以枚举其他Files指令中的所有禁止的文件?

比方说,admin /也包含user.php和admin.php,这个虚拟主机应该被禁止。

编辑:我也尝试了以下修改,试图按照伊格纳西奥的答案build议,同样的结果“禁止”:

  ... # disallow the admin directory: <Directory /var/www/html/admin> order allow,deny deny from all </Directory> # but allow this single file:: <Files /var/www/html/admin/allowed.php> order allow,deny allow from all AuthType basic AuthName "private area" AuthUserFile /home/webroot/.htusers Require user admin1 satisfy all </Files> ... 

尝试这个:

 <Directory /var/www/html/admin> <Files allowed.php> AuthType basic AuthName "private area" AuthUserFile /home/webroot/.htusers Require user admin1 </Files> order allow,deny deny from all satisfy any </Directory> 

在一个目录中嵌套的文件将只适用于其中,所以你的代码块更符合逻辑组织,我认为使用“满足任何”将允许他们按计划合并。 我不确定是否真的需要这样做,没有满足线…

我不确定使用<Files xxx>的解决scheme实际上运行良好,因为需求文档页面声明它不适用于Files

 Context: directory, .htaccess 

相反,Apache文档build议为文件创build一个单独的目录:

删除子目录中的控件

以下示例显示如何使用Satisfy指令禁用受保护目录的子目录中的访问控制。 这个技术应该谨慎使用,因为它也会禁用mod_authz_host强制的访问控制。

 <Directory /path/to/protected/> Require user david </Directory> <Directory /path/to/protected/unprotected> # All access controls and authentication are disabled # in this directory Satisfy Any Allow from all </Directory>