我在security.conf设置了以下指令来阻止apache提供任何隐藏的文件或目录。
<LocationMatch ^(.*/)\..*> Require all denied </LocationMatch>
在000-default.conf是通过HTTPauthentication来保护整个站点的下面的指令。
<Location /> AuthUserFile /var/www/site/.htpasswd AuthName "Restricted Area" AuthType Basic Require valid-user </Location>
现在当我login时<LocationMatch ^(.*/)\..*>被完全忽略。 我尝试过:
<Location /> ... Satisfy all </Location>
..没有成功:(
这个问题真的来自@HBruijn指出,Apache合并不同部分的方式以及基于文件系统的限制(如<Directory>和<Files> )和基于URIpath的限制(如<Location> 。因为可以完全覆盖另一个,所以更安全,更容易使用,而不是两者都使用。
因此,例如,在Apache v2.4中,如果在上例中使用Directory而不是Location ,并使用FilesMatch拒绝对具有前导文件的文件的访问. ,它应该工作。 但是,如果你尝试使用它的位置都不会。
例:
<FilesMatch "^\..+$"> require all denied </FilesMatch> <Directory /path/to/your/docroot> AuthUserFile /var/www/site/.htpasswd AuthName "Restricted Area" AuthType Basic Require valid-user </Directory>
请注意,在@HBruijn页面中,实际上存在一个警告,不要试图使用<Location>块来限制访问“ 什么时候使用”部分下的文件系统上的文件。