🏁 導入:「URLの“/”はフォルダじゃない?」
一見「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.html | DirectoryIndex設定によりindex.php優先 |
| SEO上の注意 | パス統一が重要 | canonicalとRewriteで正規化 |
💡 TablePressへのインポート方法:
上表をコピー → TablePress管理画面 → 新規追加 → 「インポート」タブ → テキストとして貼り付け → 区切り文字を自動検出。
🧩 例外・混在の注意点
index.htmlとindex.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での評価」までを図解します。

