我有一个Apache 2.4 VirtualHost
,其访问受AuthType Basic
:
<VirtualHost ...>
DocumentRoot /var/www/www.example.com/public
<Directory /var/www/www.example.com/public>
AuthType Basic
AuthBasicProvider ldap
AuthLDAPURL "ldap://ldap.example.com/dc=example,dc=com?uid?sub"
AuthLDAPBindDN "user"
AuthLDAPBindPassword "secret"
AuthLDAPGroupAttribute memberUid
AuthLDAPGroupAttributeIsDN off
</Directory>
</VirtualHost>
使用.htaccess
中的/var/www/www.example.com/public
文件,我可以取消保护图片和其他资源:
# Allow assets without HTTP Auth
<FilesMatch "\.(gif|jpe?g|png|css|js|ico)$">
Satisfy Any
Allow from all
</FilesMatch>
此设置有效:限制访问网站,不限制直接链接到资产。
现在我希望一些非常具体的图片保持其访问限制:比如任何名为foobar-.*\.jpg
的文件。
我尝试将以下内容添加到我的.htaccess
文件中:
# But do not allow theses JPG images
<FilesMatch "foobar-.*\.jpg$">
Require valid-user
Order allow,deny
Satisfy Any
</FilesMatch>
这似乎有效:
/var/www/www.example.com/public/imgs/foo/foobar-baz.jpg
文件存在且在用户登录HTTP的浏览器上http://www.example.com/imgs/foo/foobar-baz.jpg正确显示(否则他们会获得 401 Unauthorized )。
使用cURL命令:
curl --user foobar:secret -D - -o /dev/null -s http://www.example.com/imgs/foo/foobar-baz.jpg
我的Apache error.log
文件中出现以下错误:
[Fri Jun 24 13:36:41.989506 2016] [access_compat:error] [pid 26834] [client 1.2.3.4:35251] AH01797:客户端被服务器配置拒绝:/var/www/www.example.com/公共/ IMGS /富/ foobar的-baz.jpg
access.log
包含:
1.2.3.4 - foobar [24 / Jun / 2016:13:36:41 +0200]&#34; GET /imgs/foo/foobar-baz.jpg HTTP / 1.0&#34; 200 24652&#34; - &#34; &#34;卷曲/ 7.35.0&#34;
由于部署问题,我希望在.htaccess
文件中保留访问配置。