web-dev-qa-db-ja.com

Apache2:ディレクトリのインデックス作成を許可しますが、ファイルアクセスをタイプごとに制限します

Apache2サーバー(バージョン2.2.22)を構成して、WWWルートフォルダーとそのサブディレクトリの自動インデックス作成を許可するが、アクセスを特定のファイルタイプのセット(つまり、)のみに制限する必要があります。 txtおよび.log)。つまり、誰でもどのファイルが存在するかを確認できますが、ダウンロードできるのは特定のファイルタイプのみです。

ダウンロードを指定されたファイルタイプのみに制限する次のことを思いつきましたが、ディレクトリインデックスのすべてのURLは403Forbiddenを返します。

<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
Keith Morgan

インデックスファイルも許可する必要があります。

_<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 doc にあるオプションがたくさんあります。

お役に立てれば。

4
Zimmi

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>
_
0
Eric Wheeler