Установить 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. Напишите первый комментарий
*Комментарий будет опубликован после проверки модератором

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

Загрузка изображения в Laravel

Русификация Laravel

Добавить поле к существующей таблице Laravel

Как поменять язык в Faker

Транслитерация URL в Laravel. Примеры str_slug()

Разработка бота Telegram с помощью Botman на локальном компьютере

Валидация данных в Laravel form request

Laravel Excel - Базовый экспорт

Добавить в botman editMessageText для Telegram

Как сделать middleware в Laravel 6 - простой пример

Создать ссылку на storage из внешнего каталога для Laravel

Как русифицировать или поменять шаблон уведомления о сбросе пароля в Laravel

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

Laravel: Отношения моделей многие ко многим - belongsToMany

Валидация номера кредитной карты на PHP (Laravel)

Laravel: Отношения моделей один ко многим - hasMany, belongsTo

Связать папку storage с папкой public в Laravel

Откуда в Laravel Jetstream (inertia) prop auth.user?

Создание form request в Laravel: руководство для начинающих

Экспорт маршрутов из Laravel в JSON файл

Постраничная навигация на Bootstrap в Laravel 8

Обработка ошибок в Laravel form request

Blade - расширить @section с использованием директивы @parent

Добавить данные об авторизации при каждом запросе к API в Laravel

Работа с файлами в Laravel Form Request

Работа с вложенными объектами и коллекциями в Laravel form request

Стандартные свойства модели в Laravel

Laravel: Отношение через таблицу-посредника - hasOneThrough()

Laravel: Отношения моделей один к одному - hasOne, belongsTo

Авторизацией и аутентификация в Laravel form request

Настройка команды CRON на хостинге nic.ru для активации Laravel schedule

Laravel form request для создания API-запросов

Laravel: Отношение через таблицу-посредника - hasManyThrough()

HTTP-запросы в Laravel form request - работа с различными типами запросов

Создание класса модели в Laravel

Создание уникального индекса в миграции Laravel

Установка Laravel и создание нового проекта

Как создать модель в Laravel

Создание таблицы в базе данных (миграции) для модели в Laravel

Базовые методы CRUD контроллера для модели в Laravel

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