新規のLaravelのプロジェクトは、以下の実行で作成できます。

$ laravel new blog

/blogのディレクトリが作成され、そこには以下のようなディレクトリやファイルが作成されます。

app/
bootstrap/
config/
database/
public/
resources/
storage/
tests/
vendor/
artisan
composer.json
composer.lock
gulpfile.js
package.json
phpunit.xml
readme.md
server.php

/publicのディレクトリがウェブサイトのルートとなる仮定で、その他のディレクトリはユーザーからはアクセスできないという仮定なのですが、

しかし、現実は使用するサーバーの都合により、このpublicのディレクトリを違う場所に移動する必要があります。

例えば、

public

/usr/www/demo/webdocs

に、

その他のディレクトリやファイルは、ウェブがアクセスできない以下に

/usr/www/demo/blog

この変更に必要な設定は、Laravelではとても簡単です。

public/index.php、移動後では、/usr/www/demo/webdocs/index.phpを編集するだけです。

...
require __DIR__.'/../bootstrap/autoload.php';
...
$app = require_once __DIR__.'/../bootstrap/app.php';
..

...
require '/usr/www/demo/blog/bootstrap/autoload.php';
...
$app = '/usr/www/demo/blog/bootstrap/app.php';
..

と書き換えるだけです。

しかし、ここで1つ問題は、Laravel定義のpublic_path関数が返す値が、

/usr/www/demo/blog/public

となります。

これを修正するには、

...
require '/usr/www/demo/blog/bootstrap/autoload.php';
...
$app = '/usr/www/demo/blog/bootstrap/app.php';

$app->bind('path.public', function() {
    return __DIR__;
});
..

と、path.publicを設定する必要あります。
それにより、public_path関数が返す値は、

/usr/www/demo/blog/webdocs

となります。

By khino