У меня проблема с .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>