2015-05-12 2 views
14

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

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

ответ

20

Довольно легко найти это с помощью простого поиска.

См: 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__; 
}); 

Редактировать:


Как упоминалось Бурак Эрдем, еще один вариант (и более предпочтительно), чтобы поместить это в методе \App\Providers\AppServiceProviderregister().

/** 
* Register any application services. 
* 
* @return void 
*/ 
public function register() 
{ 
    // ... 

    $this->app->bind('path.public', function() { 
     return base_path('public_html'); 
    }); 
} 
+0

это не работает для меня: фатальная ошибка: вызов функции-члена make() для не-объекта в ... – Ravexina

+0

Просто добавив это? Я могу включить его без ошибок. Можете ли вы опубликовать полное сообщение об ошибке, это не говорит мне так много, как есть. – Robert

+0

у вас есть представление о моей другой проблеме, связанной с laravel: https://stackoverflow.com/questions/30236016/index-page-returns-blank-page-laravel-5 – Ravexina

9

Если решение Роберта 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'; 
    }); 
} 
+0

Я предпочитаю использовать этот метод. Он работает в Laravel 5.3. –

0

Для тех, которые необходимо изменить общественный путь, так что она также доступна для Artisan, добавьте следующие строки в bootstrap/app.php, только после последнего singleton метода:

$app->bind('path.public', function() { 
    return base_path("<your public directory name>"); 
}); 
-1

Я решил эту проблему проблема с использованием .htaccess после очень долгого времени. Следуйте за этим два шага

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

    RewriteEngine На RewriteRule^(. *) $ Публичный/$ 1 [L]

0

Это не так просто, как привязка. Самый чистый и более подробный ответ предоставлен Ferroho здесь https://laracasts.com/discuss/channels/general-discussion/where-do-you-set-public-directory-laravel-5

Но самый быстрый ответ - это создание символической ссылки с именем public, указывающей на public_html и помещающей ваш index.php в последнюю.

0

Просто хочу, чтобы обновить все предыдущие ответы, если ваш public_html не находится внутри папки Laravel, то вам нужно использовать этот код:

$this->app->bind('path.public', function() { 
    return realpath(base_path().'/../public_html'); 
}); 
0

Эти ответы не работали Laravel 5,5, но мой собственный метод может помочь тебе.

Шаг 1: Отменить все файлы, кроме общего файла, в основной каталог на сервере.

Шаг 2: Публичный файл в файл public_html на сервере.

Шаг 3: Вытяните файл index.php из public_html и измените его следующим образом.

Шаг 3A:

Orginal ->require __DIR__.'/../vendor/autoload.php';

Изменения ->require __DIR__.'/../**created_folder**/vendor/autoload.php';

Оригинал ->$app = require_once __DIR__.'/../bootstrap/app.php';

Изменения ->$app = require_once __DIR__.'/../**Created_folder**/bootstrap/app.php';

Шаг 4: Создание symlinkcreate.php

Шаг 4A: <?php symlink('/home/**server_directory**/**created_folder**/storage/app/public','/home/**server_directory**/public_html/storage');

Шаг 4B: yourwebsite.com/symlinkcreate.php посетить

Шаг 4C: symlinkcreate.php удалить сервер.

Наконец, структура каталогов выглядит следующим образом:

/etc 
/logs 
/lscache 
/mail 
/Your_Created_Folder 
    ../LARAVEL_FOLDERS 
/public_html 
    ../css 
    ../js 
    ../.htaccess 
    ../index.php 
    ../web.config 
/ssl 
/tmp 

Готово.

Laravel 5.5 public_html sorunu için bu cevabı gönül rahatlığıyla kullanabilirsiniz.

0

привет ребята это работает для меня ... Вы можете использовать его

перейти по этому адресу:

/app/Providers/AppServiceProvider.php 

и добавьте этот код в конец файла ....

public function register() 
{ $this->app->bind('path.public', function() { 
    return realpath(base_path().'/../public_html'); 
    }); 
} 
Смежные вопросы