Структура папок
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)
Не писать ответ