Мне нужно настроить мой сервер Apache2 (версия 2.2.22) таким образом, чтобы я разрешил автоматическую индексацию корневой папки WWW и ее подкаталогов, но ограничил доступ (т.е. ограничил загрузку) только набором определенных типов файлов (т.е. txt и .log). Другими словами, любой может видеть, какие файлы присутствуют, но только определенные типы файлов могут быть загружены.
Я придумал следующее, которое ограничивает загрузку только указанными типами файлов, но все URL-адреса для индекса каталога возвращают 403 Forbidden.
<Directory /var/www/>
Options Indexes FollowSymLinks
SetOutputFilter DEFLATE
AllowOverride None
Order allow,deny
<FilesMatch "">
Order deny,allow
allow from all
</FilesMatch>
<FilesMatch ".+\.(?!(txt|log)$)[^\.]+?$">
Order allow,deny
deny from all
</FilesMatch>
</Directory>
Вам также необходимо разрешить индексные файлы:
<FilesMatch "^index\.">
Order allow,deny
allow from all
</FilesMatch>
потому что Apache будет искать их (например, index.html
, index.cgi
, ...) но все они запрещены. Я не уверен, почему, но я полагаю, что Apache не может даже проверить наличие этих файлов, а затем отправляет 403. Если Apache может проверить отсутствие этих файлов индекса, он создаст индекс каталога, а для этого потребуется <FilesMatch "">
Директива, поскольку имя индексного файла - "".
Вы можете найти информацию в файле журнала ошибок, несколько строк вроде:
client denied by server configuration: /var/www/index.html
И поскольку вы хотите, чтобы список запрещенных файлов тоже был перечислен, вам необходимо добавить:
IndexOptions ShowForbidden
например после Options Indexes FollowSymLinks
. Есть множество вариантов для индексов каталогов, вы можете найти их в документ apache.
Надеюсь это поможет.
В FilesMatch
необходимо поразить все возможные записи из DirectoryIndex
директива и пустая строка. Если у вас есть это:
DirectoryIndex index.html index.html.var index.php
тогда это ваш матч:
<Files ~ ^index\.(html|php|html.var)$|^$>
Возможно, проще всего установить DirectoryIndex
а затем сопоставьте:
DirectoryIndex index.html
<Files ~ ^index\.html$|^$>
<Limit GET HEAD>
Order Allow,Deny
Allow from all
</Limit>
</Files>