.htaccess для ограничения доступа к папке
У меня есть php файл, который наследует (включает) другие файлы PHP. Все унаследованные файлы находятся в одной папке с именем "includes". Я хочу иметь возможность ограничить прямой доступ к этой папке. Только файлы PHP на сервере могут связываться с файлами в папке "Включает". Как я могу использовать .htaccess для достижения такой цели?
FYI, я использовал следующий код, и он не работал
Order deny,allow
deny from all
Любая помощь будет оценена
Ответы
Ответ 1
Если у вас нет возможности фактически перемещать папку "включает" вне области "Корневая область документа" и с помощью include_path (т.е. вы не можете добраться до него из Интернета), введите
deny from all
в каталоге .htaccess в этом каталоге.
Однако альтернативой является использование директивы DEFINES, позволяющей разрешать доступ только к тем, которые включают в себя программы по определенным авторизованным файлам. Например, поместите
<?php defined('ACCESS_ALLOWED') or die('Restricted Access'); ?>
в верхней части включенных файлов, а затем поместите
<?php define('ACCESS_ALLOWED', 1); ?>
в программах, которым разрешено включать эти файлы.
Это предотвратит случайные GET для тех, которые включают в себя файлы от их запуска, и будет работать на любом веб-сервере, а не только на тех, которые поддерживают файлы htaccess.
Ответ 2
в вашем include/.htaccess:
Order deny,allow
deny from all
Ответ 3
Фактически вы можете просто использовать index.php
и передать заголовок 404 с помощью header()
:
header('HTTP/1.1 404 Not Found', 404);
IMO, это лучше, чем 403, так как он, как и папка, не существует. Что касается включенных файлов, поместите эту строку над первой строкой include/require
основного файла:
define('INCLUDED', true);
И в каждом файле в каталоге include поместите это в большинстве своем.
if (!defined(INCLUDED)) {
header('HTTP/1.1 404 Not Found', 404);
}
Ответ 4
Вы можете запретить прямой доступ к папке, используя следующие директивы в htaccess или server.config contex:
Решение, основанное на модульном псевдониме
Redirect 403 ^/folder/.+$
Это перенаправит все файлы и директории/папку/на страницу запрещенной ошибки 403.
Модифицированное базовое решение:
RewriteEngine on
RewriteRule ^/?folder/.+$ - [F]
Ответ 5
В зависимости от возможных других параметров, установленных на более высоком уровне, вам может потребоваться использовать:
Satisfy all
Order deny,allow
Deny from all
Я столкнулся с этим, когда верхний каталог определил базовую аутентификацию, включая строку:
Satisfy any
Это мешало моему отказу от всех вступить в силу, потому что пользователи прошли аутентификацию.