Я использую общий хостинг, который использует cPanel в качестве панели управления, а внутри cPanel public_html
является корневым каталогом по умолчанию, из-за этого я не могу нормально работать с приложением Laravel.
Есть ли способ заставить Laravel использовать public_html
вместо public_html
папки?
Довольно легко найти это с помощью простого поиска.
В 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__; });
Редактировать:
Как отметил Бурак Эрдем, другой вариант (и более предпочтительный) заключается в том, чтобы поместить это в метод \App\Providers\AppServiceProvider
register()
.
/** * Register any application services. * * @return void */ public function register() { // ... $this->app->bind('path.public', function() { return base_path('public_html'); }); }
Если решение index.php
Robert не работает для вас, вы также можете зарегистрировать следующий код в 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'; }); }
Для тех, кому необходимо изменить общедоступный путь, чтобы он также был доступен для Artisan, добавьте следующее к bootstrap/app.php
сразу после последнего метода singleton
:
$app->bind('path.public', function () { return base_path("<your public directory name>"); });
Это не так просто, как привязка. Самый чистый и более подробный ответ предоставляется ferroho здесь https://laracasts.com/discuss/channels/general-discussion/where-do-you-set-public-directory-laravel-5
Но самый быстрый ответ – создать символическую ссылку с именем public, указывающую на public_html, и поместить ваш index.php в последнюю.
Я решил эту проблему, используя .htaccess после очень долгого времени. Следуйте этим двум шагам
Вставьте код ниже в .htaccess
RewriteEngine On RewriteRule ^ (. *) $ Public / $ 1 [L]