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.