LoginSignup
24
25

More than 5 years have passed since last update.

Laravel の publicフォルダの階層を移動させたい

Last updated at Posted at 2016-08-05

某レンタルサーバのサブディレクトリ配下に、Laravel 5.1 をインストールする必要がありました。

普通に composer等で Laravel をインストールすると、フォルダ構造は

/laravel        # laravel本体
/laravel/public # ドキュメントルート

みたいな感じで、laravel本体の下の public フォルダが公開領域になるのですが、これだとレンタルサーバのサブディレクトリ配下にインストールするには都合がわるい。

たとえばこんな感じに public フォルダの場所を変更し、laravel本体と公開領域とは別階層に分けたい。

/laravel        # laravel本体
/www/subfolder  # ドキュメントルートのサブフォルダ

そのために作業したことまとめです。

とりあえず public を移動させる

/laravel/public フォルダを /www/subfolder などに移動させます。

index.php を修正

移動させた /www/subfolder/index.php 内を、 2ヶ所書き換えます。

/www/subfolder/index.php

// 変更前
require __DIR__.'/../bootstrap/autoload.php';
$app = require_once __DIR__.'/../bootstrap/app.php';
// 変更後
require __DIR__.'/../../laravel/bootstrap/autoload.php';
$app = require_once __DIR__.'/../../laravel/bootstrap/app.php';

require のパスの修正をしているだけです。これで、ひとまず動作するようになります。

php artisan serve が動くようにする

ただ、まだこの状態では php artisan serve コマンドが以下のようなエラーになります。

$ php artisan serve

  [ErrorException]
  chdir(): No such file or directory (errno 2)

なので php artisan serve から参照される public フォルダの場所を変更したいのですが、Illuminate\Foundation\Application 内の publicPath() メソッドでフォルダ名が直書きされていました。ということで、継承したクラスを新たに作ります。

laravel/app/Application.php

<?php
namespace App;

class Application extends \Illuminate\Foundation\Application
{
    public function publicPath()
    {
       return dirname($this->basePath) . '/www/subfolder';
    }
}

こんな感じで、新しくドキュメントルートを設定。

で、 laravel/bootstrap/app.php の冒頭で読み込んでいる Application クラスを、新しく作ったものに変更します。

laravel/bootstrap/app.php

$app = new App\Application(
    realpath(__DIR__.'/../')
);

server.php を修正

/laravel/server.php 内にもパスの指定がありますので、それを修正します。

/laravel/server.php

// 変更前
if ($uri !== '/' and file_exists(__DIR__.'/public'.$uri)) {
    return false;
}
require_once __DIR__.'/public/index.php';
// 変更後
if ($uri !== '/' and file_exists(__DIR__.'/../www/subfolder'.$uri)) {
    return false;
}
require_once __DIR__.'/../www/subfolder/index.php';

以上で動くようになりました。(Laravel 5.1.40 で確認)

24
25
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
24
25