Структура папок
site.ru/ (корневая дирректория домена) |-- laravel_app/ (папка проекта laravel) |-- [остальные папки] |-- docs/ (Ваш $_SERVER['DOCUMENT_ROOT']) |-- index.php (для site.ru) |-- lc/ (бывшая «public») |-- index.php (для site.ru/lc/)
Зачем выносить папку public за пределы Laravel проекта
Задача состоит в том, чтобы разположить Laravel в поддиректории сайта, и это само по себе является не вполне стандартной задачей. Предложенная структура обусловлена тем, что не хочется хранить папку проекта Laravel в DOCUMENT_ROOT. Иначе придется размещать файлы проекта параллельно с файлами установленной на сайте CMS.
- Во-первых решаются очевидные проблемы с безопастностью — исходный код теперь недоступен извне (иначе можно обратиться и запустить PHP, или просто скачать статические файлы)
- Решается потенциальная проблема, связанная с человеческим фактором. Из-за того, что папка проекта не будет видна в файловом менеджере CMS сайта, заказчик (или его кот) не сможет начать грузить туда картинки, или просто случайно удалить.
- А еще если мы выносим папку
laravel_app
, то нам становится удобнее организовать приложение Laravel как репозиторий на GitHub. В .gitignore добавить 2 строки:docs*
docs/lc
. В репозитории будут 2 папки — laravel_app и docs.
Корректируем пути
В соответствии со структурой папок переименовать пути в lc/index.php
. Для предложенной структуры:
__DIR__.'/../ // заменить на __DIR__.'/../../laravel_app/
Также необходимо указать новое расположение папки public. Это можно сделать в AppServiceProvider.php
public function boot() { $this->app->bind('path.public', function() { return base_path().'/../docs/lc'; }); }
Правки в webpack.mix.js
Сперва устанавливаем пакет для объединения конфигураций:
npm install laravel-mix-merge-manifest
Теперь в корневом файле webpack.mix.js
вносим правки (код для Laravel 8, но тут суть только в замене папок):
const mix = require('laravel-mix'); // require('laravel-mix-merge-manifest'); // Добавить строчку mix.setPublicPath('../docs/lc').mergeManifest(); // Добавить строчку с указанием на паш путь к папке mix.js('resources/js/app.js', 'js') // поменять public на lc .postCss('resources/css/app.css', 'css', [ // поменять public на lc // ]); mix.version(); // (Не имеет отношения к делу, но я добавляю версионирование файлов)
Поправки для корректного создания связи со storage
В файле config/filesystems.php
внести правку:
'links' => [ //public_path('storage') => storage_path('app/public'), public_path('../../docs/lc/storage') => storage_path('app/public'), ],
После чего выполнить копанду и получить ярлык на папку в нужном месте
php artisan storage:link
Маленькая рекомендация
Если ведете разработку на локальном сервере, то лучше сделать так, чтобы структура файлов повторялась, чтобы сохранить корректность путей для статических файлов и ссылок
Комментарии (0)
Не писать ответ