获取FilesMatch和Satisfy Any可以使用子目录

时间:2014-01-27 15:19:02

标签: apache .htaccess .htpasswd

我正在尝试使用以下.htaccess规则锁定目录树(但允许通过图像文件)

AuthType Basic
AuthName "Test Sites. *Please Contact xxxxxxx for access.*"
AuthUserFile /home/www/testsites/.htpasswd
Require valid-user

<FilesMatch "\.(gif|jpe?g|png)$">
  Satisfy Any
  Allow from all
</FilesMatch>

然而,当我尝试它时,如果图像不直接位于httpdocs目录中,我仍然会被要求对图像进行身份验证。

换句话说

http://www.testsites.com/test.jpg将被允许通过,但是 http://www.testsites.com/sitename/images/test.jpg要求进行身份验证。

知道为什么会这样吗?

2 个答案:

答案 0 :(得分:2)

尝试基于mod_setenvif的替代方法:

SetEnvIfNoCase Request_URI "\.(gif|jpe?g|png)$" ALLOWED

AuthType Basic
AuthName "Test Sites. *Please Contact xxxxxxx for access.*"
AuthUserFile /home/www/testsites/.htpasswd
Require valid-user
Satisfy    any
Order      deny,allow
Deny from  all
Allow from env=ALLOWED

答案 1 :(得分:1)

不确定为什么会发生这种情况,因为<Files><FilesMatch>应该应用于所有子目录。您可以尝试使用SetEnvIf来匹配整个URI,而不是依赖apache核心来首先将URL映射到文件:

SetEnvIf Request_URI \.(gif|jpe?g|png)$ no_auth=true

AuthType Basic
AuthName "Test Sites. *Please Contact xxxxxxx for access.*"
AuthUserFile /home/www/testsites/.htpasswd
Require valid-user
Satisfy Any
Deny from All
Allow from env=no_auth