【ドメイン深掘り・第4回】:「/の正体!フォルダではないURLの裏側(HTML→PHP→WordPress)」

webの仕組み

🏁 導入:「URLの“/”はフォルダじゃない?」

https://hd0.biz/2025/10/

一見「2025フォルダの中の10フォルダ」ですが、実際のサーバー上には存在しないことがほとんどです。
これはHTML時代とPHP時代の構造的な違いによるものです。


🧱 HTML時代:物理フォルダ=URLパス

昔ながらの静的サイトはURLとディレクトリ構造が1対1でした。

/var/www/html/ ├── index.html → https://example.com/ ├── about/ │ └── index.html → https://example.com/about/ └── news/ ├── index.html → https://example.com/news/ └── 2025.html → https://example.com/news/2025.html

ブラウザが /about/ にアクセスすると、サーバーは内部的に /about/index.html を探します。
つまり「/」は本当にフォルダ区切りでした。

[メモ]
ディレクトリURL(末尾 / あり)は、慣習的に「配下の index.* を返す」動作になります。


⚙ PHP時代:URLは“プログラムへの入口”に変化

PHPはHTMLを生成する実行環境。URLは「ページの場所」ではなくスクリプトへの入口です。

/var/www/html/ ├── index.php ← 入口 ├── about.php └── news.php

例:

https://example.com/news.php?id=123

このURLはDBから記事を読み込み、PHPが動的にHTMLを生成します。
つまり、物理ファイルが無くてもページを出せるのが現代のサイト構造です。


⚖ index.htmlとindex.phpの優先順位

どちらが優先されるかはApacheの DirectoryIndex 設定によります。

DirectoryIndex index.php index.html
  • index.php が先 → PHPが優先され、index.htmlは無視されます
  • index.html が先 → 静的HTMLが優先され、WordPressが動かなくなることも
  • どちらも無し → 403 Forbidden または 404

[注意]
WordPressのルートに index.html を置くと、WordPressが表示されなくなるケースがあります。
動的CMS環境では index.php 優先が基本です。


🔁 「/」がフォルダではなくなる仕組み(Rewrite)

WordPressなどのCMSでは .htaccess のRewrite機能を使い、
物理的には存在しないURLを仮想的に動作させています。

# 実ファイルが存在しないとき、index.phpへ渡す
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

/2025/10/ のようなURLは、内部的には次のように処理されます。

/index.php?year=2025&monthnum=10

つまり、/ はもはや階層の区切りではなくルーティング記号
PHPが“フォルダのフリ”をして動的に生成しています。


🔍 SEOとSearch Consoleでの扱い

GoogleはURLを厳密に判別します。

URL扱い
/about/about/ とは別ページ扱い
/news?id=123/news?id=124 とは別ページ
/2025/10/末尾 / の有無で別URL扱い

[ポイント]
Search Consoleでは「重複しています。正規URLが選択されていません」と出る場合があります。
→ 内部リンクで末尾 / を統一し、WordPressの canonical 出力に合わせるのが安全です。


🧮 HTMLとPHP/WordPress構造の比較(TablePress用)

項目静的HTML(物理フォルダ)PHP/WordPress(仮想ルーティング)
URLの意味/about//about/index.html/about/index.php?page=about
実ファイル各ページが実ファイルとして存在index.php など共通ファイルで動的生成
構造変更ファイル移動が必要URLだけで変更可能(内部は共通)
優先読み込みindex.htmlDirectoryIndex設定によりindex.php優先
SEO上の注意パス統一が重要canonicalとRewriteで正規化

💡 TablePressへのインポート方法:
上表をコピー → TablePress管理画面 → 新規追加 → 「インポート」タブ → テキストとして貼り付け → 区切り文字を自動検出。


🧩 例外・混在の注意点

  • index.htmlindex.php が同時にある場合、サーバー設定によっては片方しか動かない
  • WordPress配下では、index.html を設置するとWPが無効化されるケースがある
  • テスト目的以外で混在させるのは非推奨

[注意]
開発環境で両方置くと一見動いてもキャッシュやサーバー優先度で不安定になります。
ルートディレクトリでは index.php一本化 が安全です。


📚 まとめ

/ はフォルダではなく、ルーティングの区切り記号
HTML時代の「階層構造」と、PHP/WordPress時代の「仮想構造」を区別して考えるのが重要です。

  • HTMLでは /about/ は「実フォルダ」
  • PHPでは /about/ は「index.phpが解釈する仮想ルート」
  • WordPressは .htaccess + canonical で両者を橋渡し

🔜 次回予告:「?id=123」の正体とは?

次回(第5回)は、URLに含まれる ?id=123クエリパラメータを徹底解説。
「Rewrite後にどう変換されるか」「SEO上の扱い」「Google Search Consoleでの評価」までを図解します。

リンク

【ドメイン深掘り・第3回】「//って何?wwwの時代から今まで」URL構造とドメインの“右から左”の話