publicのディレクトリをドキュメントルートとした場合、ドキュメントルートよりも上のディレクトリにapp, bootstrap, configといったディレクトリが展開されることとなります。
ドキュメントルートの上のディレクトリにはアクセスログなどのディレクトリがあり、それらのディレクトリと混ざってしまうことがあるかと思います。
Laravelのファイルはディレクトリを追加して、そこに格納するようにしたいと思います。
laravel/frameworkのバージョンはv9.45.1です。
目的とするディレクトリ構造
laravelというディレクトリにソースを格納し、/var/www/public/をドキュメントルートとするディレクトリ構造を目指します。
/var/www/
├ logs/ <もともとあるディレクトリなど>
│ ├ ...
│ └ access-yymmdd.log
├ laravel/ <Larabelのソースを格納するディレクトリ>
│ ├ app/
│ ├ bootstrap/
│ ├ config/
│ ├ database/
│ ├ lang/
│ ├ node_modules/
│ ├ resources/
│ ├ routes/
│ ├ storage/
│ ├ tests/
│ ├ vendor/
│ ├ .editorconfig
│ ├ .env
│ ├ .gitattributes
│ ├ .gitignore
│ ├ artisan
│ ├ composer.json
│ ├ composer.lock
│ ├ manifest.json
│ ├ package-lock.json
│ ├ package.json
│ ├ phpunit.xml
│ ├ README.md
│ └ vite.config.js
└ public/ <DocumentRoot>
├ build/
├ .htaccess
├ favicon.ico
├ index.php
└ robots.txt
作業手順
手順といってもファイルの移動、3ファイルの更新で完了します。
ファイルの移動
laravelのディレクトリを作成し、publicのディレクトリ以外のディレクトリとファイルをlaravelのディレクトリに移動します。
public/index.phpの書き換え
public/index.phpに記載のあるパス(3か所)にlaravel/を追記します。
public/index.php
if (file_exists($maintenance = __DIR__.'/../laravel/storage/framework/maintenance.php')) {
require $maintenance;
}public/index.php
require __DIR__.'/../laravel/vendor/autoload.php';public/index.php
$app = require_once __DIR__.'/../laravel/bootstrap/app.php';AppServiceProvider.phpの書き換え
app/Providers/AppServiceProvider.phpのregister関数に追記します。
AppServiceProvider.php
/**
* Register any application services.
*
* @return void
*/
public function register()
{
$this->app->bind('path.public', function () {
return base_path() . '/../public';
});
}viteの変更
vite.config.jsのlaravel-vite-pluginにpublicDirectoryを追加します。
vite.config.js
export default defineConfig({
plugins: [
laravel({
publicDirectory: '../public',
input: ['resources/css/app.css', 'resources/js/app.js'],
refresh: true,
}),
],
});[AD]

