Dokumentation / Aus einem anderen Ordner als public_html veröffentlichen

Aus einem anderen Ordner als public_html veröffentlichen

Standardmäßig veröffentlicht eine Domain public_html in Ihrem Home-Verzeichnis. Moderne PHP-Frameworks sind andersherum gebaut: Die Anwendung liegt in einem Ordner, und nur ein public/-Unterordner darin soll aus dem Web erreichbar sein. Die .env-Datei — Datenbankpasswort, Anwendungsschlüssel, Zahlungs-Zugangsdaten — liegt bewusst eine Ebene darüber.

Wenn Sie stattdessen das gesamte Projekt veröffentlichen, ist /.env eine URL, die jeder abrufen kann. Die Wahl des Document Root ist der Weg, das zu vermeiden.

Setzen

Domains → die Zeile der Domain → Document root.

Sie werden nach einem Ordner innerhalb Ihres Home-Verzeichnisses gefragt, relativ dazu geschrieben:

app/public

nicht /home/you/app/public. Lassen Sie es leer, um zu public_html zurückzukehren.

Das Panel legt den Ordner an, falls er noch nicht existiert, schreibt die Webserver-Konfiguration um und lädt sie neu. Wenn es fertig ist, teilt es Ihnen den vollständigen Pfad mit, den es nun veröffentlicht, und sagt es ausdrücklich, wenn es den Ordner anlegen musste.

Ein typisches Layout danach:

/home/you/
├── app/            <- the whole project: composer.json, .env, vendor/
│   └── public/     <- the only part served to the web
└── public_html/    <- the default, no longer used

Prüfen, ob es funktioniert hat

Laden Sie die Website. Fragen Sie dann die Datei ab, die Sie schützen wollten:

curl -sI https://yourdomain.com/.env

403 ist die Antwort, die Sie wollen. Ein 200 bedeutet, der Document Root liegt noch über .env und die Änderung wurde nicht wirksam — laden Sie die Domains-Seite neu und bestätigen Sie, dass die Zeile den von Ihnen eingetippten Ordner zeigt.

Welche Domains dies haben

  • Primärdomain, Addon-Domains und Subdomains haben jeweils ihren eigenen Document Root und ihre eigene Document root-Schaltfläche.
  • Geparkte (Alias-)Domains nicht. Ein Alias bedient immer Ihre primäre Website, was ihn zum Alias macht. Das Panel sagt es: „A parked domain always serves your primary website. Change the primary document root instead, or convert this to an addon domain."
  • Weiterleitungen nicht. Eine Weiterleitung bedient nichts Eigenes.

Was das Panel ablehnt, und warum

Der Wert wird geprüft, bevor er etwas Privilegiertes erreicht, und auf der anderen Seite erneut geprüft. Ablehnungen kommen als Meldung auf der Seite zurück, und nichts wird geändert.

Sie tippten Warum es abgelehnt wird
/var/www/html, ~/app Es muss relativ zu Ihrem Home sein. Absolute Pfade und ~ werden nicht akzeptiert.
../../etc, app/../.. Ein Ordnername darf nicht mit einem Punkt beginnen, was .. unmöglich macht. Nichts außerhalb Ihres Home ist erreichbar, per Konstruktion.
.ssh, .git, .config Dieselbe Regel. .ssh zu veröffentlichen, würde Ihre Schlüssel ins Web stellen; .git zu veröffentlichen, würde Ihren Quellcode-Verlauf dorthin stellen.
tmp Dort liegen Ihre PHP-Sitzungsdateien. Es zu veröffentlichen, heißt die Sitzungen Ihrer Besucher zu veröffentlichen.
logs, etc, mail, ssl, backups Werden vom Panel für Ihr Konto genutzt.
a/b/c/d/e Höchstens vier Ebenen tief.
alles über 128 Zeichen Zu lang.

Eine weitere Prüfung findet auf dem Server selbst statt: Der Ordner wird durch etwaige symbolische Links aufgelöst und erneut geprüft. Ein Symlink, der aus Ihrem Home hinauszeigt, wird abgelehnt statt verfolgt, sodass ln -s / ~/app sich nicht in ein bedientes Dateisystem verwandelt.

Zertifikate

Nichts zu tun. Ein Zertifikat wird für die Domain ausgestellt, nicht für den Ordner, und der von Ihnen gesetzte Document Root wird in dem Moment neu gelesen, in dem ein Zertifikat geschrieben wird — sodass es sicher ist, ihn zu ändern, während HTTPS eingerichtet wird. Eine Addon-Domain, die bereits HTTPS hat, behält es.

Wenn etwas falsch aussieht

Die Website zeigt ein Verzeichnislisting oder „index of /". Der neue Ordner hat noch keine index.php oder index.html. Laden Sie die Anwendung hoch oder richten Sie den Document Root auf den Ordner, der eine hat.

403 auf jeder Seite, nicht nur auf .env. Der Ordner existiert, aber der Webserver kann nicht in ihn hineinlesen. Prüfen Sie mit dem File Manager, dass der Ordner und seine übergeordneten Ordner zu Ihrem Konto gehören, besonders wenn Sie die Dateien über SSH als anderer Benutzer dort abgelegt haben.

404 auf jeder Seite, und die Website funktionierte vor einer Minute noch. Laden Sie die Domains-Seite neu und lesen Sie den in der Zeile angezeigten Ordner. Ein Tippfehler wird genau so veröffentlicht, wie eingetippt — das Panel legt den Ordner an, statt zu raten, sodass ein leerer neuer Ordner die übliche Ursache ist. Setzen Sie es zurück auf public_html oder auf den richtigen Ordner.

Jede Seite gibt 500 mit einem Framework-Fehler über einen fehlenden Schlüssel zurück. Das ist die Anwendung, nicht der Document Root — das Framework wird erreicht. Bei Laravel ist das üblicherweise ein leerer APP_KEY.