如何使用apache .htaccess隐藏某些文件类型?

时间:2010-05-18 18:39:26

标签: apache .htaccess

自从我需要破解.htaccess文件以来已经很久了......

40x阻止访问整个网站的特定文件扩展名的最简单方法是什么?

6 个答案:

答案 0 :(得分:23)

<FilesMatch "\.(htaccess|htpasswd|ini|log|sh|inc|bak)$">
Order Allow,Deny
Deny from all
</FilesMatch>

加载了一些常用扩展程序,可根据需要添加更多扩展程序。

答案 1 :(得分:12)

如果你真的想要404(而不是403),你可以使用mod_rewrite:

RewriteEngine on
RewriteRule \.ext$ - [R=404]

答案 2 :(得分:4)

<FilesMatch "\.ext$">
    Deny from all
</FilesMatch>

请参阅FilesMatchDeny

上的Apache文档

编辑:Artefacto会生成good point,如果这对您的目的非常重要,则会返回403,而非404;

答案 3 :(得分:2)

您还可以使用RedirectMatch指令拒绝访问文件扩展名:

RedirectMatch 403 ^/.+\.(php|html|gif)$

如果客户请求任何以.php.html.gif结尾的uri,则会为客户返回403禁止错误。您可以使用条形|为模式添加更多扩展。

答案 4 :(得分:0)

我喜欢@Chris Lawlor和@ starkeen的答案,因为OP询问“40x”我会建议重定向到404错误,因为它不会泄露文件存在的事实。

这是我目前在我的一个项目中使用的内容:

# Hide files not concerning the user
RedirectMatch 404 \.(htaccess|htpasswd|ini|log|sh|inc|bak|bkp|sql)$

答案 5 :(得分:0)

@Dário对文件类型有正确的想法,它也可以用于特定的文件和目录。唯一缺少的是管理区分大小写。

我遇到了this article that gives some detail about case-sensitive RedirectMatch,还建议对字符大小写不敏感。

  

在重定向大多数请求时,无论如何都是小写。或者,您可以使用RewriteRule来确定不区分大小写。但是在某些情况下,很高兴知道您也可以通过将RedirectMatch添加到规则中来使用(?i)滚动。

RedirectMatch 403 /\$\&
RedirectMatch 403 (?i)/\.(bash|git|hg|log|svn|swp|tar)
RedirectMatch 403 (?i)/(1|contact|i|index1|iprober|phpinfo|phpspy|product|signup|t|test|timthumb|tz|visit|webshell|wp-signup).php
RedirectMatch 403 (?i)/(author-panel|class|database|manage|phpMyAdmin|register|submit-articles|system|usage|webmaster)/?$
RedirectMatch 403 (?i)/(=|_mm|cgi|cvs|dbscripts|jsp|rnd|userfiles)