2017-01-22 2 views
0

Ich habe eine Laravel-Site, die lokal auf meinem Computer läuft, aber ich möchte es live machen. Ich bezahle bereits für Shared Hosting, und ich habe eine Reihe von Websites auf dem freigegebenen Host in ihren eigenen Unterverzeichnissen ausgeführt. So zum Beispiel im Shared-Hosting, ich habe:Wie Laravel Website auf Shared Hosting, die mehrere andere Websites in Unterverzeichnissen hat?

public_html/site1 
public_html/site2 
etc. 

Dies sind alle persönlichen Websites. So würde Ich mag dort auch meine Laravel Website setzen:

public_html/laravelsite 

Das Problem ist, dass ich offensichtlich nicht will, die Mehrheit der Dateien tatsächlich öffentlich zugänglich sein. Wenn ich sie jedoch aufteile und einfach die public Site-Dateien in public_html/laravelsite lege und den Rest der Dateien in einen Ordner über public_html lege, wird nichts in der Lage sein, etwas anderes zu finden, und die Site wird nicht funktionieren.

Gibt es eine andere Problemumgehung, die ich verwenden kann, um meine Dateien zu sichern?

Antwort

0

Wenn Benutzer Ihrer Website beantragen, ist der Ausgangspunkt immer public/inde.php. Legen Sie also den öffentlichen Ordner wo Sie wollen und den Rest (Laravel) wo Sie wollen. Versuchen Sie dann von public/index.php, bootstrap/autoload.php zu verknüpfen.

Zum Beispiel in Ihrem Fall würden Sie public/index.php gehen und 22 Zeilen ändern und 36, so dass sie immer noch die autload.php Datei wie diese finden:

22. require __DIR__.'/../bootstrap/autoload.php'; 

wird

22. require __DIR__.'/../../laravel_folder/bootstrap/autoload.php'; 

Und

36. $app = require_once __DIR__.'/../bootstrap/app.php'; 

wird

35. $app = require_once __DIR__.'/../../laravel_folder/bootstrap/app.php'; 

Es gibt andere Wege, das gleiche zu tun. Finden Sie einfach den, der Ihren Bedürfnissen entspricht.

Für Elixir „... Sie mit ./ beliebigen Dateipfad beginnen kann. Dies weist Elixir am Projekt Wurzel zu beginnen, anstatt die Standard-Basisverzeichnis verwenden“. Quelle: https://laravel.com/docs/5.3/elixir. Sie müssen also so etwas tun, um die Quelle zu ändern.

Sie können dasselbe tun, um das Ziel zu ändern. Jetzt, wenn Sie die Unterschiede zwischen Ihrem Entwickler und Prod minimieren möchten, reorganisieren Sie Ihren Ordner in Dev, um eine ähnliche Struktur zu haben.

+0

Danke, das scheint zu funktionieren, obwohl ich immer noch einen Fehler bekomme, weil ich einen Git-Klon gemacht habe und vergessen habe, dass Knotenmodule und Hersteller nicht im Repo gespeichert wurden. Sobald ich alle Dateien übertragen habe und bestätigen kann, dass es funktioniert, wähle ich diese als die richtige Antwort aus - danke! – bansheekitty

+0

Ich bekomme immer noch einen Fehler: "Datei css/all.css nicht in Asset-Manifest definiert." Ich gehe davon aus, dass es etwas mit der Tatsache zu tun hat, dass sich die Verzeichnispfade geändert haben, aber ich konnte nicht herausfinden, wie ich es beheben kann. – bansheekitty

+1

Ich nahm das {{elixir ('css/all.css')}}} heraus, löschte den Cache und fügte den Link direkt ein. Das scheint es gelöst zu haben. – bansheekitty

0

Versuchen AppServiceProvider.php öffnen und ändern, wie folgend:

<?php namespace App\Providers; 

use Illuminate\Support\ServiceProvider; 

class AppServiceProvider extends ServiceProvider { 

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

und die Inhalte der öffentlichen Ordner abgelegt Ordner laravelsite.

+0

Dank hinzufügen für Ihre Antwort! Ich denke, ich könnte mit einer anderen Lösung gehen, aber diese sieht auch gut aus. – bansheekitty

0

naheliegendste Lösung - nur der Server sagen, keine Dateien dienen von /public_html/laravelsite?

Zum Beispiel, wenn Ihr Shared Hosting Apache verwendet wird, erstellen Sie eine .htaccess Datei in /public_html/laravelsite mit

Deny from all 

Dann gehen Sie auf Ihre .htaccess Datei Laravel im public Verzeichnis und

Allow from all 
+0

Hmm, das wäre einfach. – bansheekitty

Verwandte Themen