Как изменить общую папку на public_html в laravel 5
Я использую общий хостинг, который использует cPanel в качестве панели управления, а внутри cPanel public_html
является корневым каталогом по умолчанию, из-за этого я не могу нормально работать с приложением Laravel.
Есть ли способ заставить Laravel использовать public_html
вместо общей папки?
Ответы
Ответ 1
Довольно легко найти это с помощью простого поиска.
Смотрите: https://laracasts.com/discuss/channels/general-discussion/where-do-you-set-public-directory-laravel-5
В вашем index.php добавьте следующие 3 строки.
/*
|--------------------------------------------------------------------------
| Turn On The Lights
|--------------------------------------------------------------------------
|
| We need to illuminate PHP development, so let us turn on the lights.
| This bootstraps the framework and gets it ready for use, then it
| will load up this application so that we can run it and send
| the responses back to the browser and delight our users.
|
*/
$app = require_once __DIR__.'/../bootstrap/app.php';
// set the public path to this directory
$app->bind('path.public', function() {
return __DIR__;
});
Edit:
Как отметил Бурак Эрдем, другой вариант (и более предпочтительный) заключается в том, чтобы поместить это в метод \App\Providers\AppServiceProvider
register()
.
/**
* Register any application services.
*
* @return void
*/
public function register()
{
// ...
$this->app->bind('path.public', function() {
return base_path('public_html');
});
}
Ответ 2
Если решение Robert index.php
не работает для вас, вы также можете зарегистрировать следующий код в Application Service Provider (App\Providers\AppServiceProvider.php)
.
<?php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
public function register()
{
$this->app->bind('path.public', function() {
return base_path().'/public_http';
});
}
Ответ 3
Для тех, кому необходимо изменить общедоступный путь, чтобы он также был доступен для Artisan, добавьте следующее к bootstrap/app.php
сразу после последнего метода singleton
:
$app->bind('path.public', function () {
return base_path("<your public directory name>");
});
Ответ 4
Это не так просто, как привязка. Самый чистый и более подробный ответ предоставляется ferrolho здесь https://laracasts.com/discuss/channels/general-discussion/where-do-you-set-public-directory-laravel-5
Но самый быстрый ответ - создать символическую ссылку с именем public, указывающую на public_html, и поместить ваш index.php в последнюю.
Ответ 5
Просто хочу обновить все предыдущие ответы, если ваш public_html не находится в папке laravel, тогда вам нужно использовать этот код:
$this->app->bind('path.public', function() {
return realpath(base_path().'/../public_html');
});
Ответ 6
Я решил эту проблему, используя .htaccess после очень долгого времени. Выполните следующие два шага.