Documentation / Publier depuis un dossier autre que public_html

Publier depuis un dossier autre que public_html

Par défaut, un domaine publie public_html dans votre répertoire personnel. Les frameworks PHP modernes sont conçus à l'inverse : l'application vit dans un dossier et seul un sous-dossier public/ à l'intérieur est censé être accessible depuis le web. Le fichier .env — mot de passe de la base, clé d'application, identifiants de paiement — se trouve un niveau au-dessus, délibérément.

Si vous publiez le projet entier à la place, /.env est une URL que n'importe qui peut demander. Choisir la racine du document est la façon d'éviter cela.

La définir

Domaines → la ligne du domaine → Racine du document.

On vous demande un dossier à l'intérieur de votre répertoire personnel, écrit de manière relative à celui-ci :

app/public

et non /home/you/app/public. Laissez-le vide pour revenir à public_html.

Le panneau crée le dossier s'il n'existe pas encore, réécrit la configuration du serveur web et la recharge. Une fois terminé, il vous indique le chemin complet qu'il publie désormais, et le précise explicitement s'il a dû créer le dossier.

Une disposition typique par la suite :

/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

Vérifier que cela a fonctionné

Chargez le site. Puis demandez le fichier que vous protégiez :

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

403 est la réponse que vous voulez. Un 200 signifie que la racine du document est toujours au-dessus de .env et que le changement n'a pas pris effet — rechargez la page Domaines et vérifiez que la ligne affiche le dossier que vous avez saisi.

Quels domaines disposent de ceci

  • Le domaine principal, les domaines additionnels et les sous-domaines ont chacun leur propre racine du document et leur propre bouton Racine du document.
  • Les domaines garés (alias) n'en ont pas. Un alias sert toujours votre site web principal, c'est ce qui en fait un alias. Le panneau le dit : « Un domaine garé sert toujours votre site web principal. Modifiez plutôt la racine du document principale, ou convertissez-le en domaine additionnel. »
  • Les redirections n'en ont pas. Une redirection ne sert rien qui lui soit propre.

Ce que le panneau refuse, et pourquoi

La valeur est vérifiée avant d'atteindre quoi que ce soit de privilégié, et vérifiée à nouveau de l'autre côté. Les refus reviennent sous forme de message sur la page, et rien n'est modifié.

Ce que vous avez saisi Pourquoi c'est refusé
/var/www/html, ~/app Il doit être relatif à votre répertoire personnel. Les chemins absolus et ~ ne sont pas acceptés.
../../etc, app/../.. Un nom de dossier ne peut pas commencer par un point, ce qui rend .. impossible. Rien en dehors de votre répertoire personnel n'est atteignable, par construction.
.ssh, .git, .config Même règle. Publier .ssh mettrait vos clés sur le web ; publier .git y mettrait votre historique de code source.
tmp Vos fichiers de session PHP y résident. Le publier revient à publier les sessions de vos visiteurs.
logs, etc, mail, ssl, backups Utilisés par le panneau pour votre compte.
a/b/c/d/e Quatre niveaux de profondeur au maximum.
tout ce qui dépasse 128 caractères Trop long.

Une vérification de plus a lieu sur le serveur lui-même : le dossier est résolu à travers tout lien symbolique et re-vérifié. Un lien symbolique pointant hors de votre répertoire personnel est refusé plutôt que suivi, de sorte que ln -s / ~/app ne se transforme pas en un système de fichiers servi.

Certificats

Rien à faire. Un certificat est émis pour le domaine, pas pour le dossier, et la racine du document que vous définissez est relue au moment où un certificat est écrit — changer celle-ci pendant la mise en place du HTTPS est donc sans danger. Un domaine additionnel qui a déjà le HTTPS le conserve.

Quand quelque chose semble anormal

Le site affiche une liste de répertoire ou « index of / ». Le nouveau dossier ne contient pas encore de index.php ni de index.html. Téléversez l'application, ou pointez la racine du document vers le dossier qui en possède un.

403 sur chaque page, pas seulement sur .env. Le dossier existe mais le serveur web ne peut pas y lire. Vérifiez avec le Gestionnaire de fichiers que le dossier et ses parents appartiennent à votre compte, surtout si vous avez placé les fichiers là par SSH en tant qu'un autre utilisateur.

404 sur chaque page et le site fonctionnait il y a une minute. Rechargez la page Domaines et lisez le dossier affiché dans la ligne. Une faute de frappe est publiée exactement telle que saisie — le panneau crée le dossier plutôt que de deviner, un nouveau dossier vide est donc la cause habituelle. Remettez-le sur public_html, ou sur le bon dossier.

Chaque page renvoie 500 avec une erreur de framework à propos d'une clé manquante. C'est l'application, pas la racine du document — le framework est bien atteint. Pour Laravel, il s'agit généralement d'un APP_KEY vide.