Есть footer.php и index.php. В index я подключаю footer PHP: require($_SERVER['DOCUMENT_ROOT'].'/private/footer.php'); Нужно запретить доступ к файлу footer (403), но если перенаправлять с страницы футера на ошибку 403, то будет перенаправляться и в index'e. Как запретить доступ к footer, но чтобы в index не перенаправляло?
Ты мог бы поместить footer.php и все подобные файлы за пределами DOCUMENT_ROOT. Взрослые фреймворки по-умолчанию работают с такой структурой: Код (Text): ProjectRoot | +-- app - здесь функции и классы | +-- view - здесь "хидеры", "футеры" и прочий вывод текста | +-- public - здесь "индекс", эта папка соответствует DocumentRoot веб-сервера к тому, что лежит вне public невозможно обратиться напрямую из браузера, оно только может инклудиться из скрипта(ов) в public. то, что ты просил. --- Добавлено --- P.S. Даже если ты не сделаешь такую ^^^ структуру, замени все require($_SERVER['DOCUMENT_ROOT'] на require(__DIR__ потому что $_SERVER['DOCUMENT_ROOT'] существует только в web, а если ты когда-нибудь начнешь пользоваться консолью (например использовать cron), получишь ошибку.
@artoodetoo предложил, конечно, самый лучший вариант. Тем не менее, есть ещё способы ограничить через настройки сервера (в случае Apache можно использовать .htaccess)
Можно также в index создавать константу, а в остальных файлах в самом начале проверять if defined() Так сделано в старых проектах, но это костыль, как ни крути.
@artoodetoo то есть, если в конфиге прописано PHP: root /var/www/htm/public; то в корень html, уже не попасть?
Ты столько времени чегой-то там программируешь на Laravel, и ещё не осознал этот факт? --- Добавлено --- Только надо уточнить, что не попасть именно через внешний запрос к веб-серверу. Внутри сервера попасть можно. Если получится закачать и запустить шелл, то шеллу, который работает на сервере, будет доступно всё то же, что и скриптам сайта.
Можно и фронт убрать из корня и полностью запретить в нем выполнение скриптов. --- Добавлено --- Корнем все же принято называть public, а его надкаталог можешь называть, например, каталогом сайта.
@Dimon2x если в конфиге nginx прописана такая директива: Код (Text): root /var/www/htm/public; то корень сайта или "document root" находится в /var/www/htm/public, а корень проекта [ можно поместить ] в /var/www/htm, так наверное будет звучать понятней. видимая в браузере часть проекта будет в под-папке public. весь проект — в htm. понял?
@artoodetoo ну я знаю, что сейчас у меня корень запуска скриптов из паблика, а все файлы лежат за пабликом
Что значит корень запуска скриптов? Я твои термины не понимаю и подозреваю худшее --- Добавлено --- В какой папке у тебя composer.json? -- Это и есть папка проекта. В ней, обычно находится под-папка public. И этот public обычно объявлен как root в nginx или DocumentRoot в Apache. У тебя так?