ドキュメント / public_html 以外のフォルダから公開する

public_html 以外のフォルダから公開する

既定では、ドメインはホームディレクトリの public_html を公開します。現代の PHP フレームワークは 逆の作りになっています。アプリケーションは 1 つのフォルダの中にあり、その中の public/ サブフォルダだけがウェブから到達可能であるべき、という設計です。.env ファイル — データベースの パスワード、アプリケーションキー、決済認証情報 — は、意図的にその 1 つ上の階層に置かれます。

代わりにプロジェクト全体を公開すると、/.env は誰でもリクエストできる URL になります。 ドキュメントルートを選ぶことが、それを避ける方法です。

設定する

ドメイン → 対象ドメインの行 → ドキュメントルート。

ホームディレクトリ内 のフォルダを、それに対する相対パスで尋ねられます。

app/public

/home/you/app/public ではありません。空欄にすると public_html に戻ります。

パネルはフォルダがまだ存在しなければ作成し、ウェブサーバーの設定を書き換えて再読み込みします。 完了すると、現在公開している完全なパスを伝え、フォルダを作成しなければならなかった場合は明示的に そう述べます。

その後の典型的な構成:

/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

動作したか確認する

サイトを読み込みます。次に、保護していたファイルをリクエストします。

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

期待する答えは 403 です。200 はドキュメントルートがまだ .env の上にあり、変更が 反映されていないことを意味します — ドメインページを再読み込みし、行に入力したフォルダが表示 されていることを確認してください。

どのドメインにこれがあるか

  • プライマリドメイン、アドオンドメイン、サブドメイン はそれぞれ独自のドキュメントルートと 独自の ドキュメントルート ボタンを持ちます。
  • パーク(エイリアス)ドメイン にはありません。エイリアスは常にプライマリのウェブサイトを 提供し、それがエイリアスたる所以です。パネルはこう述べます。「パークドメインは常にプライマリの ウェブサイトを提供します。代わりにプライマリのドキュメントルートを変更するか、これをアドオン ドメインに変換してください。」
  • リダイレクト にもありません。リダイレクトは自分自身のものを何も提供しません。

パネルが拒否するもの、そしてその理由

値は特権的な処理に達する前にチェックされ、反対側でも再度チェックされます。拒否はページ上の メッセージとして返り、何も変更されません。

入力したもの 拒否される理由
/var/www/html、~/app ホームに対する相対でなければなりません。絶対パスと ~ は受け付けられません。
../../etc、app/../.. フォルダ名はドットで始められません。それが .. を不可能にします。構造上、ホームの外側には何も到達できません。
.ssh、.git、.config 同じルールです。.ssh を公開すれば鍵がウェブに出ます。.git を公開すればソース履歴がそこに出ます。
tmp PHP のセッションファイルがそこにあります。公開することは訪問者のセッションを公開することです。
logs、etc、mail、ssl、backups アカウントのためにパネルが使用します。
a/b/c/d/e 深さは最大 4 階層までです。
128 文字を超えるもの 長すぎます。

サーバー自体でもう 1 つのチェックが行われます。フォルダはすべてのシンボリックリンクを解決した うえで再チェックされます。ホームの外を指すシンボリックリンクは、たどるのではなく拒否されるので、 ln -s / ~/app が提供されるファイルシステムに化けることはありません。

証明書

何もすることはありません。証明書はフォルダではなく ドメイン に対して発行され、設定した ドキュメントルートは証明書が書かれる瞬間に読み直されます — なので HTTPS 設定中にそれを変更しても 安全です。すでに HTTPS を持つアドオンドメインはそれを保ちます。

何かおかしいと感じたとき

サイトがディレクトリ一覧や「index of /」を表示する。 新しいフォルダにまだ index.php も index.html もありません。アプリケーションをアップロードするか、いずれかを持つフォルダに ドキュメントルートを向けてください。

.env だけでなくすべてのページで 403。 フォルダは存在しますが、ウェブサーバーがその中を 読み込めません。特に SSH で別のユーザーとしてファイルを置いた場合は、フォルダとその親が自分の アカウントに属していることをファイルマネージャーで確認してください。

すべてのページで 404、しかも 1 分前まで動いていた。 ドメインページを再読み込みし、行に 表示されるフォルダを読んでください。打ち間違いは入力どおりそのまま公開されます — パネルは 推測せずフォルダを作成するので、空の新しいフォルダが通常の原因です。public_html に戻すか、 正しいフォルダに設定してください。

すべてのページが、キーがないというフレームワークのエラーとともに 500 を返す。 それは ドキュメントルートではなくアプリケーションの問題です — フレームワークには到達しています。 Laravel の場合、通常は APP_KEY が空です。