ドキュメントルートとは
ドキュメントルートは、Webサーバーが公開ファイルを探す起点となるディレクトリです。英語ではdocument root(ドキュメント・ルート)と表します。
たとえば文書ルートが/var/www/exampleなら、URLパス /images/logo.webpを、その下のimages/logo.webpへ対応させる基本構成があります。
文書ルートは公開境界です。ソースコード、パスワード、バックアップ、ログなど、URLから配る必要のないデータは外へ置きます。

URLとファイルパスを対応させる
/guide/start/のように、ドメインより後ろの公開名として表す。
文書ルート、索引、別名、書き換え、アクセス規則から処理先を決める。
guide/start/index.htmlなど、許可されたルートの下のファイルを読み取る。
サーバールートやホームディレクトリーとは違う
Webサーバーソフトウェアの設定・ログを置くサーバールート、利用者アカウントのホームディレクトリー、アプリケーションのプロジェクトルート、OSのファイルシステムルートは別です。名称にルートが付いても役割は一致しません。
レンタルサーバーではドメインごとにpublic_htmlなどのディレクトリーが文書ルートとして割り当てられます。管理画面が示す対象ドメインと絶対パスを確認してアップロードします。
ディレクトリーURLは索引ファイルへ対応できる
/about/への要求でabout/index.htmlを返すのはDirectoryIndexなどの設定です。索引ファイルがなくディレクトリーlistingが有効だと、ファイル一覧を表示してしまう場合があります。
listingを不要なら無効にし、索引ファイルを置きます。大文字・小文字を区別するファイルシステムでは、Logo.webpとlogo.webpは別ファイルです。
すべてのURLが実ファイルとは限らない
書き換えやアプリケーション経路制御により、/articles/42を一つのindex.phpへ渡す構成があります。別名で文書ルート外の特定ディレクトリーを別URLへ対応させることもできます。
したがって404を調べるときは、ファイルの存在だけでなく、仮想ホスト、文書ルート、書き換え、別名、権限、アプリケーション経路を順に見ます。
ルート相対URLはドメインの公開ルートが基準
HTML内の/assets/site.cssは、現在のページディレクトリーではなくドメインのルートから探します。HTTPサーバー上では文書ルートのassets/site.cssへ対応します。
HTMLをfile://で直接開くとドメインのルートがないため、ローカルディスクのルートを参照して失敗する場合があります。正確な確認にはローカルHTTPサーバーを使います。
公開用フォルダーだけをアップロードする
ビルド前のソース、設計書、生成確認画面、環境設定、試験データ、データベース書き出し、エディターの一時ファイルを文書ルートへ置きません。公開できる成果物だけを別フォルダーへ出力し、その中身をアップロードします。
.env、.git、バックアップの.zipや.sql、ログ、旧ファイルは特に危険です。Webサーバーが拡張子を実行しなくても、平文テキストとして配る可能性があります。
パス横断とsymlinkを境界で止める
利用者入力をファイル名へそのまま連結すると、../などでルート外へ進むディレクトリー横断が起き得ます。正規化後のパスが許可ルート内に収まることを確認し、可能ならIDから固定パスを引きます。
symbolicリンクがルート外を指す場合の追跡可否も設定します。リンクを置いただけで安全な境界になるわけではありません。
読取と実行、アップロード先を分ける
Webサーバー処理には公開ファイルを読む最小権限だけを与えます。利用者がアップロードしたファイルを置くディレクトリーではスクリプト実行を禁止し、拡張子だけでなくコンテンツタイプ、大きさ、画像再符号化、保存名を検査します。
アプリケーションが書き込める場所とプログラムコードを同じにすると、アップロードや改ざんからコード実行へつながります。リリースファイルは原則読み取り専用にします。
仮想ホストごとに別ルートを持てる
同じサーバーでもexample.jpとshop.example.jpへ異なる文書ルートを割り当てられます。片方のディレクトリーをもう片方から読めないようOS権限も分けます。
文書ルートを決めることは、URLから見せるものと見せないものの境界を決めることです。公開に不要なデータを置かないのが最も確実な防御です。
document rootとURL mappingの確認資料:Apache HTTP Server「Getting Started」、Apache HTTP Server「Mapping URLs to Filesystem Locations」