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>
Другие вопросы по тегам