Apache2: разрешить индексирование каталогов, но ограничить доступ к файлам по типу
Мне нужно настроить сервер Apache2 (версия 2.2.22) таким образом, чтобы я разрешал автоматическую индексацию корневой папки WWW и ее подкаталогов, но ограничивал доступ (т.е. ограничивал загрузку) только набором определенных типов файлов (т. Е. TXT и.LOG). Другими словами, любой может видеть, какие файлы присутствуют, но могут быть загружены только определенные типы файлов.
Я придумал следующее, которое ограничивает загрузку только указанными типами файлов, но все URL-адреса для индекса каталога возвращают 403 Запрещено.
<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>
2 ответа
Вам также необходимо разрешить индексные файлы:
<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>