Как скрыть определенный тип файла с помощью apache.htaccess?

Это было давно, так как мне нужно было открыть файл .htaccess...

Каков самый простой способ 40x предотвратить доступ к определенному расширению файла, хотя и на весь сайт?

Ответы

Ответ 1

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

Загрузите некоторые общие расширения, добавьте больше, как вам нужно.

Ответ 2

Если вы действительно хотите 404 (а не 403), вы можете использовать mod_rewrite:

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

Ответ 3

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

Смотрите документацию Apache на FilesMatch и Deny

EDIT: Artefacto делает хороший результат, это вернет 403, а не 404, если это важно для ваших целей

Ответ 4

Вы также можете запретить доступ к расширениям файлов с помощью директивы RedirectMatch:

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

Это приведет к ошибке 403 для клиентов, если они запросят любой uri, который заканчивается на .php или .html или .gif. Вы можете добавить дополнительные расширения к шаблону с помощью панели |.

Ответ 5

Мне нравятся как @Chris Lawlor, так и @starkeen ответы, и поскольку OP спросил о "40x", я собираюсь предложить перенаправить ошибку 404, поскольку она не дает факта существования файлов.

Это то, что я сейчас использую в одном из моих проектов:

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

Ответ 6

@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)