拒绝除1之外的所有文件类型并允许自动索引

时间:2017-08-18 11:37:18

标签: apache apache2 restrictions

我已经搜遍了所有的stackoverflow并看到了各种帖子但到目前为止没有运气。

让我画一幅画:我为我和一些好友主持一个游戏服务器,我将目录与地图和mod混合到apache2。我只希望外面的世界能够下载所谓的" pk3"文件,但不是" cfg"," log"或任何其他文件类型。

那部分我开始工作了。我也想让autoindex工作但到目前为止没有运气。我收到403错误。

现状:

<Directory /var/www/redirect/*>
    allow from all
    Options +Indexes
    IndexIgnore .. *cfg* *dat *dll *txt URL *log *backup* database
    IndexOptions FancyIndexing FoldersFirst
    AllowOverride None
    Require all granted
</Directory>

<Files *>
    Order deny,allow
    deny from all
</Files>

<Files *.pk3>
    Order deny,allow
    allow from all
</Files>

<FilesMatch "^(index\.*)?$">
    Order allow,deny
    allow from all
</FilesMatch>

FilesMatch似乎无法正常工作(因此我的日志中的[access_compat:error]和浏览器中的403)。

希望有人可以帮我这个,我一直在寻找几个小时。

1 个答案:

答案 0 :(得分:0)

见这里: https://serverfault.com/questions/634996/apache2-allow-directory-indexing-but-restrict-file-access-by-type

您还需要允许索引文件:

<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中找到目录索引的众多选项。

希望这有帮助。

更新: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>