Ответ 1
<FilesMatch "\.(htaccess|htpasswd|ini|log|sh|inc|bak)$">
Order Allow,Deny
Deny from all
</FilesMatch>
Загрузите некоторые общие расширения, добавьте больше, как вам нужно.
Это было давно, так как мне нужно было открыть файл .htaccess...
Каков самый простой способ 40x предотвратить доступ к определенному расширению файла, хотя и на весь сайт?
<FilesMatch "\.(htaccess|htpasswd|ini|log|sh|inc|bak)$">
Order Allow,Deny
Deny from all
</FilesMatch>
Загрузите некоторые общие расширения, добавьте больше, как вам нужно.
Если вы действительно хотите 404 (а не 403), вы можете использовать mod_rewrite:
RewriteEngine on
RewriteRule \.ext$ - [R=404]
<FilesMatch "\.ext$">
Deny from all
</FilesMatch>
Смотрите документацию Apache на FilesMatch и Deny
EDIT: Artefacto делает хороший результат, это вернет 403, а не 404, если это важно для ваших целей
Вы также можете запретить доступ к расширениям файлов с помощью директивы RedirectMatch
:
RedirectMatch 403 ^/.+\.(php|html|gif)$
Это приведет к ошибке 403 для клиентов, если они запросят любой uri, который заканчивается на .php
или .html
или .gif
. Вы можете добавить дополнительные расширения к шаблону с помощью панели |
.
Мне нравятся как @Chris Lawlor, так и @starkeen ответы, и поскольку OP спросил о "40x", я собираюсь предложить перенаправить ошибку 404, поскольку она не дает факта существования файлов.
Это то, что я сейчас использую в одном из моих проектов:
# Hide files not concerning the user
RedirectMatch 404 \.(htaccess|htpasswd|ini|log|sh|inc|bak|bkp|sql)$
@Dário имеет правильное представление о типах файлов, и его также можно использовать для определенных файлов и каталогов. Единственное, чего не хватает - это управлять чувствительностью к регистру.
Я наткнулся на эту статью, которая дает некоторые подробности о регистрозависимом 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)