2011-01-06 3 views
11

У меня есть файл php, который наследует (включает в себя) другие файлы PHP. Все унаследованные файлы находятся в одной папке с именем «includes». Я хочу иметь возможность ограничить прямой доступ к этой папке. Только файлы PHP на сервере могут связываться с файлами в папке «Включает». Как я могу использовать .htaccess для достижения такой цели?.htaccess для ограничения доступа к папке

FYI, я использовал следующий код и он не работает

Order deny,allow 
deny from all 

Любая помощь будет оценена

+0

Если это не работает, это может быть, что httpd.conf устанавливается не читать файлы .htaccess. Например: AllowOverride None Изменить что-то другое (например, AllowOverride All) и перезапустить веб-сервер. – user535673

ответ

19

Если вы не имеете возможность на самом деле перемещение «включает в себя» папку за пределами области Document Root, и используя include_path (т.е. вы не можете получить к нему из сети), затем введите

deny from all 

в каталоге .htaccess в этом каталоге.

Однако альтернативой является использование директивы DEFINES, позволяющей разрешать доступ к тем, которые включают в себя программы по определенным авторизованным файлам. Например, положить

<?php defined('ACCESS_ALLOWED') or die('Restricted Access'); ?> 

в верхней части включаемых файлов, а затем положить

<?php define('ACCESS_ALLOWED', 1); ?> 

в программах, которые разрешено включать в эти файлы.

Это предотвратит случайные GET для этих включенных файлов от их запуска и будет работать на любом веб-сервере, а не только на тех, которые поддерживают файлы htaccess.

3

в вашем включает/.htaccess:

Order deny,allow 
deny from all 
+0

Пробовал, но не работал –

2

Вы можете на самом деле просто используйте index.php и передайте заголовок 404, используя header():

header('HTTP/1.1 404 Not Found', 404); 

IMO, это лучше, чем 403, так как это похоже на то, что папка не существует. Что касается включаемых файлов, поместите эту строку выше первой include/require линии основного файла:

define('INCLUDED', true); 

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

if (!defined(INCLUDED)) { 
    header('HTTP/1.1 404 Not Found', 404); 
} 
+2

Вы также можете вызвать exit(); после заголовка, поскольку страница все равно может выполняться. –

0

В зависимости от других возможных вариантов, установленных на более высоком уровне, возможно, потребуется использовать:

Satisfy all 
Order deny,allow 
Deny from all 

я столкнулся с этим, когда верхний каталог определяется базовой аутентификации, включая линии:

Satisfy any 

Это препятствует моему отказу от всех вступить в силу, поскольку пользователи прошли аутентификацию.

1

Вы можете запретить прямой доступ к папке, используя следующие Директивы в htaccess или на сервере.конфиг Contex:

Mod-псевдоним решение

Redirect 403 ^/folder/.+$ 

основы Это будет перенаправлять все файлы и каталоги из/папок/403 запрещенной страницы ошибки.

Mod-переписать базовый раствор:

RewriteEngine on 

RewriteRule ^/?folder/.+$ - [F] 
Смежные вопросы