Я использую mod_rewrite для этого. К изображениям и т. Д. К стандарту относятся:
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^https?://myhostname\.com/.*$ [NC]
RewriteRule \.(gif|jpe?g|png|js|css)$ - [F]
Вы можете добавить "inc" в этот список расширений в последнем правиле.
Но для предотвращения доступа к определенным типам файлов я предпочитаю что-то вроде:
RewriteCond %{THE_REQUEST} ^\w+\ /include/ [OR]
RewriteCond %{THE_REQUEST} \.php\ HTTP/
RewriteRule ^.*$ - [R=404,L]
Это делает две вещи:
- Первое правило исключает доступ к каталогу / include из внешних запросов, но вы все равно можете включить / потребовать их; и
- Второе правило ограничивает доступ к именам файлов, заканчивающимся на .php. Вы можете использовать то же самое для файлов .inc.
В обоих случаях Apache выдаст ошибку 404 (файл не найден), что, на мой взгляд, лучше. Обычно лучше сказать, что чего-то не существует (что вы не хотите, чтобы люди видели), чем говорить, что это есть, но вы не можете получить к нему доступ. Но это только личное мнение.
Что касается того, почему я ограничиваю файлы .php от прямого доступа: я использую mod_rewrite для создания «хороших» URL. Вместо:
/account/order.php
это:
/account/order
Есть много причин для этого. Эстетика одна. SEO - это другое (если вместо /account/order.php?item=123 у вас есть /account/order/123).