.htaccess – запретить доступ к папке, но разрешить доступ к файлу через index.php

У меня проблема с .htaccess и PHP-файлами в подпапке. Я пытаюсь добиться того, чтобы кто-либо не мог получить доступ к любому файлу в моей подпапке – НО я хочу, чтобы мой index.php имел доступ к этим файлам.

DOCROOT/subfolder -> www.somewebsite.com/subfolder/somefile.php -> Access Denied 

НО

 [index.php] <form action="/subfolder/somefile.php"> ... </form> -> Success! 

Я хотел бы решить это, просто используя .htaccess. Я попробовал deny from all а также некоторых RewriteRule s, но эти Правила также убивают любой запрос из index.php. Я пытался

 Order deny,allow Deny from all Allow from 127.0.0.1 Allow from somewebsite.com Satisfy Any 

но запрос от index.php отклоняется. Может ли кто-нибудь помочь, пожалуйста?

Это заблуждение, что люди имеют. Просто потому, что вы связываетесь с файлами PHP из другого файла PHP, это не означает, что к нему обращается файл index.php . Конечный пользователь / браузер по- прежнему обращается к ним, просто ему говорят, куда идти по вашему index.php . Не имеет абсолютно никакого отношения к тому, как к нему обращаются. В обоих случаях к ним обращаются браузер.

Лучшее, что вы можете сделать, это посмотреть на поле референта. Это можно легко подделать, чтобы обойти это, но это единственное, что вы можете сделать.

 RewriteEngine On RewriteCond %{HTTP_REFERER} !^https?://(example.com|127\.0\.0\.1) [NC] RewriteRule ^subfolder/ - [L,F] 

где «example.com» – ваш сайт.

 RewriteEngine On RewriteCond %{HTTP_REFERER} !^http://www.hello.com/index.php RewriteRule .*subfolder/somefile\.php - [NC,F] 

Вторая строка проверяет, не возникает ли посетитель с определенного URL-адреса. Третья строка блокирует их доступ к somefile.php

В вашем .htaccess вы можете перенаправить любые запросы к файлам внутри этого каталога, отличным от index.php, следующим образом:

 <directory "DOCROOT/subfolder"> RewriteCond %{REQUEST_FILENAME} !=/DOCROOT/subfolder/index.php RewriteRule ^/(.+)$ redirect.php [L] </directory>