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

[MODX] Генератор настроек MIGX

Документация на русском по MODX MIGX

jQuery.Maskedinput js - документация на русском с примерами

[JS] Маска для ввода телефона +7(___)___-__-__

[MODX] Импорт и экспорт в MiniShop2. Реализация 1

[MODX] Подсказки по работе и заготовки для MiniShop2

Как включить HTTPS (SSL) в MODX - Подробная инструкция

[MODx, miniShop2] Генерация YML для выгрузки в маркет

[MODX] Примеры работы с API

[OpenCart] Вывести на главную все категории с картинками

[MODX] Сайт на обслуживании (выключить сайт)

Расширение свойств товаров minishop2

Пример перевода с помощью Yandex Translate API

[MODX, MIGX] Примеры использования

[MODX, MiniShop2] Примеры выборки where, optionFilters, innerJoin

Универсальная форма обратной связи — feedBackForm

[MODx, Gallery] Галерея. Вывести обложки альбомов и фотографии

Настройка Webpack - несколько точек входа и разделение на чанки

Отключить автозаполнение input

[Opencart] Вернуть английский язык, если вы его удалили

[MODX] pThumb - ресайз изображений. Примеры использования.

[OpenCart] Вывести модуль напрямую через контроллер

[MODX, MIGX] Вывести getImageList только если он не пустой

[MODX, MIGX] Тип поля "Список ресурсов" (resourcelist) с ограничением по родителю (parents)

[MODX, Quip] Более рабочий вариант

Все записи

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