Вот сценарий:
index.php
index.php
, которые находятся в папке includes
.submit.php
) находится в корневой папке для действия отправки формы.Я хочу ограничить прямой доступ пользователей к файлам в папке includes
htaccess. также для submit.php
. Но include будет работать для файла index.php
.
Например, если пользователь вводит www.domain.com/includes/somepage.php
, он будет ограничивать его (может быть перенаправлен на страницу с ошибкой).
Я бы просто переместил папку includes
из веб-корня, но если вы хотите заблокировать прямой доступ ко всей папке includes
, вы можете поместить файл .htaccess
в эту папку, которая содержит:
deny from all
Таким образом, вы не можете открыть какой-либо файл из этой папки, но вы можете включить их в php без каких-либо проблем.
Это чистое решение mod_rewrite
:
RewriteRule ^(includes/|submit\.php) - [F,L,NC]
Это покажет запретную ошибку, если URI содержит либо /includes/
, либо /submit.php
Можно использовать директиву Files и запретить доступ ко всем файлам, а затем использовать его еще раз для установки доступных файлов:
<Files ~ "^.*">
Deny from all
</Files>
<Files ~ "^index\.php|css|js|.*\.png|.*\.jpg|.*\.gif">
Allow from all
</Files>
1 решение на основе линейки mod_alias:
RedirectMatch 403 ^/folder/file.php$
Это покажет запрещенную ошибку для/folder/file.php
^folder
regex ^folder
.
Ваш Q поставляется в двух частях: и jeroen, и anubhava решения работают для части я - отрицания доступа к /include. анубхава также работает для части II. Я предпочитаю последнее, потому что я все равно использую DOCROOT/.htaccess
, и это сохраняет все такое управление в одном файле.
Однако то, что я хотел обсудить, - это понятие "отказ в доступе к submit.php
". Если вы не хотите использовать submit.php
, то зачем вообще это делать в DOCROOT? Я подозреваю, что ответ здесь заключается в том, что вы используете его как цель действия в некоторых формах и только хотите, чтобы он был запущен, когда форма была отправлена, а не напрямую, например. от спамбота.
Если это так, вы не можете использовать anubhava part II, так как это приведет к сбою вашей формы.
Здесь вы можете: (i) проверить .htaccess
, чтобы ссылка была вашей собственной индексной страницей:
RewriteCond %{HTTP_REFERRER} !=HTTP://www.domain.com/index.php [NC]
RewriteRule ^submit\.php$ - [F]
И (ii) в генераторе формы PHP index.php есть некоторые скрытые поля для отметки времени и проверки. Валидацией могут быть, скажем, первые 10 символов MD5 временной метки и некоторый внутренний секрет. При обработке submit вы можете (i) проверить соответствие метки времени и валидации и (ii) отметка времени находится, скажем, в течение 15 минут текущего времени.
Это позволяет предотвратить спам как единственный практический способ, с помощью которого спамер мог бы получить действительную пару временной отметки/проверки, состоял бы в том, чтобы разобрать форму, но эта царапина имела бы только 15-минутную жизнь.
Если я правильно понял, вы просто хотите запретить доступ к папке include?
..htaccess с директивой "DENY FROM ALL", помещенной в папку include, сделает трюк.
В зависимости от возможных других параметров, установленных на более высоком уровне, вам может потребоваться поместить следующее в ваш файл .htaccess в каталог include:
Satisfy all
Order deny,allow
Deny from all
Я столкнулся с этим, когда верхний каталог определил базовую аутентификацию, включая строку:
Satisfy any
Это мешало моему отказу от всех вступить в силу, потому что пользователи прошли аутентификацию.