Подключение скриптов и стилей на уровень выше корневой директории

Пытаюсь реализовать собственную cms для своего сайта в качестве практики php, но столкнулся со следующей проблемой:

Иерархия проекта

Имеется иерархия проекта описанная выше. В папке core основные важные скрипты, по типу базового контроллера, подключения к БД и др, В папке develop находятся пользовательские контроллеры, представления, модели и шаблоны В папке public только .htaccess, index.php который вызывает bootstrap.php из core и иконка сайта

При нужном url я вызываю требуемый контроллер и подключаю:

  • шапку сайта
  • представление
  • подвал сайта

но мне очень нравится идея с шаблонами, и понравилась bitrix структура шаблонов, поэтому я хотел бы сделать это и у себя. Шаблоны, как я и писал выше, хранятся в /develop/templates. Корневая директория сайта /public/

Пробовал относительные пути по совету ChatGPT и людей с форумов, не помогает

(../../develop/...)

Пробовал реализовать перенаправление в htaccess

RewriteCond %{REQUEST_URI} ^/templates/admin/(.*)$
RewriteCond %{REQUEST_URI} !/develop/templates/(.*)$
RewriteRule ^(.*)$ http://%{HTTP_HOST}/../templates/$1 [L,R=301]

но пока что ничего не помогает, а хранить шаблоны в public мне не очень нравится...

Собственно, вопрос: Можно ли реализовать подключение стилей, скриптов, картинок через php и htaccess, не затрагивая конфиг файл httpd? Пока что видел только такое решение, но хотел бы его избежать, чтобы сайт был легк переносим.

P.S. Забыл написать, что также нашел решение

echo '<style>';
include <путь к стилю>
echo '</style>';

Насколько такое решение будет... Неправильным, при создании шаблонов?

И насколько будет неправильно вынести develop и core директории в public и почему?


Ответы (1 шт):

Автор решения: Ипатьев

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

Все требуемые браузеру ресурсы - те самые assets (стили, картинки, скрипты, фонты и так далее) - должны лежать в пределах корневой директории сайта.

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

А вот шаблоны, которые парсит РНР, вполне могут лежать выше корня сайта. И в шаблонах ссылки на эти ресурсы всегда должны быть абсолютными от корня сайта. То есть если в папке public есть папка /assets/admin, то путь к скрипту будет /assets/admin/js/script.js. Если в корне есть просто папка /js/, то путь писать как /js/script.js

Через РНР подключить можно всё. Всегда можно сделать ссылку на РНР скрипт, который прочитает нужный файл из папки выше корня, выдаст подходящий НТТР заголовок и отдаст содержимое клиенту. Но это как чесать левой ногой правое ухо. Не говоря уже о том, что этот скрипт должен будет отдавать только строго определенные файлы, а не воообще всё что угодно, что для новичка будет представлять проблему.

Запихивать содержимое стилевых файлов и скриптов прямо в HTML код можно, но считается дурным тоном. И лучше сразу учиться работать ассетами нормально.

→ Ссылка