2015-05-12 34 views
14

Używam hostingu współdzielonego, który używa cPanel jako panelu sterowania, a wewnątrz cPanel public_html jest domyślnym katalogiem głównym, z tego powodu nie mogę uzyskać dostępu do mojej aplikacji Laravel prawidłowo.Jak zmienić folder publiczny na public_html w laravel 5

Czy istnieje sposób, aby Laravel używał public_html zamiast folderu publicznego?

Odpowiedz

20

Bardzo łatwo znaleźć to za pomocą prostego wyszukiwania.

Patrz: https://laracasts.com/discuss/channels/general-discussion/where-do-you-set-public-directory-laravel-5

W swojej index.php dodać następujące 3 linie.

/* 
|-------------------------------------------------------------------------- 
| 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__; 
}); 

Edycja:


Jak wspomniano Burak Erdem kolejną opcję (i bardziej korzystne), to jest umieszczenie w sposobie \App\Providers\AppServiceProviderregister().

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

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

to nie działa dla mnie: Błąd krytyczny: wywołanie funkcji member make() na obiekcie nie będącym obiektem w ... – Ravexina

+0

Po prostu przez dodanie? Mogę to zmienić bez żadnych błędów. Czy możesz opublikować pełny komunikat o błędzie, nie mówi mi to zbyt wiele. – Robert

+0

czy masz pojęcie o innym moim problemie związanym z laravel: https://stackoverflow.com/questions/30236016/index-page-returns-blank-page-laravel-5 – Ravexina

9

Jeśli index.php rozwiązanie Roberta nie działa dla Ciebie, możesz również zarejestrować poniższy kod na 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

Wolę używać tej metody. To działało w Laravel 5.3. –

0

Dla tych, które trzeba zmienić ścieżkę publicznego tak, że jest również dostępny w Artisan, dodać następujące bootstrap/app.php, tuż po ostatnim singleton metody:

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

I rozwiązać ten problem z używaniem .htaccess po bardzo długim czasie walczenia. Pod tym dwa kroki

  1. Utwórz plik .htaccess w public_html
  2. Wklej poniższy kod w pliku .htaccess

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

0

prostu chcesz uaktualnić wszystkie wcześniejsze odpowiedzi, jeśli public_html nie jest wewnątrz folderu laravel, to trzeba użyć tego kodu:

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

Odpowiedzi te nie działają na laravel 5.5, ale moja własna metoda może pomóc Ci.

Krok 1: Odrzuć wszystkie pliki, z wyjątkiem publicznego, do głównego katalogu na serwerze.

Krok 2: Plik publiczny do pliku public_html na serwerze.

Krok 3: Wyciągnij plik index.php z pliku public_html i zmień go w ten sposób.

Etap 3A:

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

zmiany ->require __DIR__.'/../**created_folder**/vendor/autoload.php';

oryginał ->$app = require_once __DIR__.'/../bootstrap/app.php';

Zmiany ->$app = require_once __DIR__.'/../**Created_folder**/bootstrap/app.php';

Krok 4: Tworzenie symlinkcreate.php

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

Krok 4B: yourwebsite.com/symlinkcreate.php odwiedzić

Krok 4C: symlinkcreate.php usunąć swój serwer.

Wreszcie, struktura katalogów wygląda następująco:

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

Finish.

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

0

Hi guys, że pracuje dla mnie ... Można go używać

iść na ten adres:

/app/Providers/AppServiceProvider.php 

i dołączyć ten kod do końca pliku ....

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