我已经搜遍了所有的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)。
希望有人可以帮我这个,我一直在寻找几个小时。
答案 0 :(得分:0)
您还需要允许索引文件:
<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>