Установить Laravel в подпапку (site.ru/laravel/)

Структура папок

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)

  1. Напишите первый комментарий
*Комментарий будет опубликован после проверки модератором

Похожие статьи

Наш сайт использует куки, нажмите «ОК» если вы не против
OK