Подтвердить что ты не робот

Как изменить общую папку на public_html в laravel 5

Я использую общий хостинг, который использует cPanel в качестве панели управления, а внутри cPanel public_html является корневым каталогом по умолчанию, из-за этого я не могу нормально работать с приложением Laravel.

Есть ли способ заставить Laravel использовать public_html вместо общей папки?

4b9b3361

Ответ 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 после очень долгого времени. Выполните следующие два шага.

  • Создайте файл .htaccess в public_html
  • Вставьте код ниже в .htaccess

    RewriteEngine On RewriteRule ^ (. *) $Public/$1 [L]