Перенос публичной директории Laravel 8, изменение пути public директории

На каждом web-сервере структура директорий-папок может отличаться и стандартная иерархия папок фреймворка Laravel 8 может быть неудобной или же не подходить вовсе.

К примеру рассмотрим такое построение директорий на web-сервере:

- domain.example.com
    - public_html
    - log
    - otherdirs

Если оставить структуру папок Laravel 8 без изменений, и разместить проект в директории domain.example.com, то существующие имена подпапок могут конфликтовать (иметь идентичные названия) с папками проекта на Laravel. Да и разобраться по прошествии времени, какие папки относятся к Ларавел, а какие - часть структуры web-сервера, будет не просто.

Решение проблемы - разместить приватную, недоступную напрямую через web-сервер часть скриптов фреймворка, в папке laravel:

- domain.example.com
    - public_html
    - laravel
    - log
    - otherdirs

В официальной документации Laravel 8 нет информации, как это сделать, но в переносе public-директории фреймворка нет никаких принципиальных сложностей.

Установка Laravel 8

Установка Laravel 8 осуществляется в директорию ../domain.example.com/laravel. Как установить Laravel 8 читайте в официальной документации фреймворка.

После установки структура каталогов и файлов должна выглядеть так:

- domain.example.com
    - public_html
    - laravel
        - app
        - bootstrap
        - config
        - database
        - public
        - resources
        ...
        .editorconfig
        .env
        .env.example
        ...

Теперь все файлы из каталога domain.example.com/laravel/public переносим в папку domain.example.com/public_html.

Изменение в файле index.php из публичной директории

Чтобы подкорректировать пути в файле domain.example.com/public_html/index.php для удобства можно добавить константу LARAVEL_PRIVATE_PATH, в примере ниже - строка №7:

  1. <?php
  2.  
  3. use Illuminate\Contracts\Http\Kernel;
  4. use Illuminate\Http\Request;
  5.  
  6. define('LARAVEL_START', microtime(true));
  7. define('LARAVEL_PRIVATE_PATH', dirname(__DIR__).'/laravel');
  8. ...

Далее, в строках 20, 35 и 48 необходимо заменить пути:

...
if (file_exists($maintenance = LARAVEL_PRIVATE_PATH.'/storage/framework/maintenance.php')) {
...
require LARAVEL_PRIVATE_PATH.'/vendor/autoload.php';
...
$app = require_once LARAVEL_PRIVATE_PATH.'/bootstrap/app.php';
 

Обновление файла server.php

В начало файла server.php, расположенный в корне приватной директории Laravel 8 (domain.example.com/laravel/server.php) сразу после комментария добавляем константу LARAVEL_PUBLIC_PATH:

define('LARAVEL_PUBLIC_PATH', dirname(__DIR__).'/public_html');

Далее корректируем пути в двух строках:

if ($uri !== '/' && file_exists(LARAVEL_PUBLIC_PATH.$uri)) {
    return false;
}

require_once LARAVEL_PUBLIC_PATH.'/index.php';

Обновление файла bootstrap/app.php

Необходимо закомментировать или удалить строки с присвоением объекта переменной $app и написать немного своего кода:

//$app = new Illuminate\Foundation\Application (
//    $_ENV['APP_BASE_PATH'] ?? dirname(__DIR__)
//);

class MyApp extends Illuminate\Foundation\Application {
    public function publicPath() {
        return dirname(__DIR__).'/public_html';
    }
}

$app = new MyApp(
    $_ENV['APP_BASE_PATH'] ?? dirname(__DIR__)
);
Опубликовано: 2022/02/07
HTML-код ссылки на эту страницу:
<a href="https://petrenco.com/php.php?txt=735" target="_blank">Перенос публичной директории Laravel 8, изменение пути public директории</a>
1482
Добавить комментарий
Ваш e-mail: (не виден посетителям сайта)
Ваше имя:
Комментарий:
Символы с картинки:
Только выделенные поля формы добавления комментариев обязательны к заполнению.