Можно ли защитить каталог / файл на сервере от внешнего мира, но сделать его доступным для PHP?

Мне было интересно: возможно ли защитить каталог / файл на сервере от внешнего мира, но сделать его доступным для PHP?

Это довольно просто. Я кэширую веб-страницы на своем сервере с PHP в определенном каталоге, но я не хочу, чтобы веб-пользователи просматривали эти файлы или этот каталог напрямую. PHP, с другой стороны, должен иметь доступ к этим файлам (чтобы обслуживать их для пользователя). Это может показаться нелогичным, но то, что я пытаюсь сделать, – это ограничить пользователей определенными страницами и по-прежнему их кэшировать в удобном для веб-сервера формате.

Предпочтительно что-то с .htaccess или chmod.

Благодаря!

Абсолютно – на самом деле вам не нужно использовать .htaccess. Просто поместите защищенный каталог над корнем вашего документа (то есть сохраните его рядом с папкой, где хранятся ваши скрипты PHP, обычно «htdocs», «httpdocs» или иногда просто «www»).

Таким образом, ваши веб-файлы будут в папке /my/folders/httpdocs/ , а ваши «защищенные» файлы будут в папке /my/folders/protected_folder/

Идея здесь заключается в том, что PHP может обращаться к любой папке на сервере, но Apache не позволит пользователю перемещаться «над» корневым каталогом.

Чтобы получить доступ к каталогу, вы можете использовать:

$protected_path = $_SERVER['DOCUMENT_ROOT'].'/../protected_folder/';

(Кстати, вы упомянули, что делаете это для кеширования страниц – возможно, вам стоит взглянуть на Smarty , механизм шаблонов PHP, который предварительно компилирует ваши шаблоны, а также поддерживает действительно интеллектуальное кэширование. И на самом деле один из Smarty " передовые методы "- это настроить вашу структуру, чтобы файлы шаблонов и кешей не находились в папке document_root или ниже, поэтому пользователи, входящие в Apache, никогда не смогут добраться до них, но код Smarty PHP может легко получить все, что от него требуется.)

Конечно, просто поместите файлы в каталог за пределами вашего веб-корня. Например, если ваш веб-корень – это /usr/local/apache/htdocs/ вы можете создать каталог /usr/local/apache/htdocs/ которому должен иметь доступ PHP, но нет доступа к нему через веб-интерфейс запрос.

Вы также можете поместить файл .htaccess состоящий из строки deny from all в каталоге, который вы хотите защитить. Это не позволит Apache (но не PHP) обслуживать файлы.