Most shared host use public_html
instead of public
,
While sometimes considered bad practice, some client may force you to drop-in everything via FTP
There are several ways to change public folder name found on Google.
But most of them won’t work perfectly.
- In AppServiceProvider.php, bind ‘path.public’ to IoC container
Won’t work in console, vendor:publish still publish in public path - In index.php, bind ‘path.public’ to IoC container
Works in console, butartisan serve
still won’t work
After dig down deep in the source code, I found the cause:
The publicPath()
method in Illuminate\Foundation\Application
is hardcoded.
public function publicPath() { return $this->basePath.DIRECTORY_SEPARATOR.'public'; }
But we should never hard the core, so let’s override this method on our own class.
1. Create app/Application.php
<?php namespace App; class Application extends \Illuminate\Foundation\Application { public function publicPath() { return $this->basePath . DIRECTORY_SEPARATOR . 'public_html'; } }
2. Edit bootstrap/app.php
, change:
$app = new Illuminate\Foundation\Application( realpath(__DIR__.'/../') );
to
$app = new App\Application( realpath(__DIR__.'/../') );
Reference: http://stackoverflow.com/questions/31758901/laravel-5-change-public-path