Подключение скриптов и стилей на уровень выше корневой директории
Пытаюсь реализовать собственную 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 код можно, но считается дурным тоном. И лучше сразу учиться работать ассетами нормально.