| この記事の要点 |
|
XAMPP でドキュメントルート(ブラウザで http://localhost/ を開いたときに表示されるフォルダ)を変更したいときは、Apache の設定ファイル httpd.conf にある DocumentRoot と <Directory> の設定を合わせて変更します。片方だけ変えると、ページが表示されなかったり 403 Forbidden になったりと、表示やアクセス制御が意図どおりにならないことがあります。
最短手順(Windows)
- XAMPP コントロールパネルを開き、Apache が起動中なら Stop を押す
- Apache 行の Config ボタン →「Apache (httpd.conf)」を選ぶ(メモ帳などで開く)
DocumentRootの行を新しいパスに書き換える- すぐ下にある
<Directory "C:/xampp/htdocs">のパスも同じパスに書き換える - HTTPS(443 番ポート)も使う場合は、
C:\xampp\apache\conf\extra\httpd-ssl.confの DocumentRoot も同様に書き換える - 保存して、コントロールパネルで Apache を Start する
- 新しいフォルダに置いたファイルが
http://localhost/ファイル名で開けるか確認する
httpd.conf の変更箇所
既定の httpd.conf には、おおむね次のような記述があります(XAMPP のバージョンによって Options の内容などは多少異なります)。
DocumentRoot "C:/xampp/htdocs"
<Directory "C:/xampp/htdocs">
Options Indexes FollowSymLinks Includes ExecCGI
AllowOverride All
Require all granted
</Directory>
たとえば D:/work/www をドキュメントルートにする場合は、次のように 2 か所を書き換えます。
DocumentRoot "D:/work/www"
<Directory "D:/work/www">
Options Indexes FollowSymLinks Includes ExecCGI
AllowOverride All
Require all granted
</Directory>
なぜ 2 か所変える必要があるのか
DocumentRoot は「URL の / をどのフォルダに対応させるか」を決める設定です。一方 <Directory> ブロックは「そのフォルダへのアクセスを許可するか、.htaccess を有効にするか」などの権限を決めます。Apache の基本設定ではルート(/)全体へのアクセスが拒否されているため、DocumentRoot だけを変えて Directory を古いパスのままにすると、新しいフォルダには許可が与えられず 403 Forbidden になります。また、AllowOverride が効かず .htaccess が無視されることもあります。
OS ごとの httpd.conf の場所
| OS | httpd.conf の場所 | 既定のドキュメントルート |
|---|---|---|
| Windows | C:\xampp\apache\conf\httpd.conf | C:/xampp/htdocs |
| macOS(XAMPP インストーラ版) | /Applications/XAMPP/xamppfiles/etc/httpd.conf | /Applications/XAMPP/xamppfiles/htdocs |
| Linux | /opt/lampp/etc/httpd.conf | /opt/lampp/htdocs |
インストール先を変えている場合はパスも変わります。コントロールパネルの Config ボタンから開けば、実際に使われているファイルを確実に開けます。
ドキュメントルートを変えずに済む方法
「プロジェクトごとに別フォルダで開発したい」という目的なら、ドキュメントルート自体は変えずに次の方法を使う方が、XAMPP のダッシュボードや phpMyAdmin を壊さずに済みます。
- Alias:
http://localhost/myapp/を別フォルダに対応させる - VirtualHost:
C:\xampp\apache\conf\extra\httpd-vhosts.confに設定を書き、myapp.localhostのような名前で別フォルダを公開する
# httpd-vhosts.conf の例
<VirtualHost *:80>
ServerName myapp.localhost
DocumentRoot "D:/work/myapp/public"
<Directory "D:/work/myapp/public">
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
Laravel のように公開フォルダが public になっているフレームワークでは、VirtualHost で public を指す方法がよく使われます。VirtualHost を 1 つでも定義すると、localhost 用の VirtualHost も別途定義しておかないと、localhost へのアクセスが最初の VirtualHost に吸い込まれる点に注意してください。
よくある落とし穴
- パス区切り: Windows でも
/(スラッシュ)で書く。末尾のスラッシュは DocumentRoot と Directory で揃える - 引用符: パスに空白を含む場合は必ずダブルクォートで囲む。全角の引用符になっていないか確認する
- 日本語や OneDrive 配下のパス: 文字コードや同期の影響でトラブルになりやすい。英数字だけのローカルフォルダを使う
- ダッシュボードが消える:
http://localhost/dashboard/は htdocs 内にあるため、ドキュメントルートを移すと表示されなくなる(phpMyAdmin は別の Alias なので通常は影響しない) - index ファイルがない: フォルダに index.php や index.html がなく、Options から Indexes を外していると 403 になる
- 再起動忘れ: 設定は Apache の再起動まで反映されない
確認方法
- コマンドプロンプトで
C:\xampp\apache\bin\httpd.exe -tを実行し、「Syntax OK」と表示されるか確認する(設定の文法チェック) - Apache が Start できない場合は、コントロールパネルの「Logs」から
error.logを開き、該当行のエラーを確認する - 新しいドキュメントルートに
<?php phpinfo();だけを書いた info.php を置き、http://localhost/info.phpを開く。表示された「DOCUMENT_ROOT」の値が新しいパスになっていれば成功 - 403 や 404 が出る場合は、Directory のパスと DocumentRoot のパスが一字一句同じか見直す
確認に使った info.php は、サーバー情報が丸見えになるため確認後に削除しておきましょう。
関連
- Apacheのドキュメントルートを変更する方法
- httpd.confとは|Apache HTTP Serverのメイン設定ファイルの構成
- Apacheで.htaccessを有効化|AllowOverride Allと性能影響
- Apache HTTP Server エラー集と対処完全ガイド
- XAMPP の Windows インストール手順(ポート競合 / php.ini / ドキュメントルート)
子ページはありません
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript で base URL を取得する方法|window.location.origin
- 4 YouTube Data API v3 エラー一覧|403・400・404 の原因と対処
- 5 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 6 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 7 Spring Frameworkのアノテーション一覧
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- プロジェクトをTomcatプロジェクトとして認識させる方法 2026-10-07 22:32:50
- MySQLの1366 Incorrect string value|Laravelの文字コード・絵文字エラー 2026-10-07 21:54:03
- curlの証明書ホスト名不一致|旧エラー51・現行60の確認と対処 2026-10-07 21:54:03
- LaravelのMassAssignmentException|fillableの原因と安全な対処 2026-10-07 21:54:03
- Eclipse で Tomcat の起動ログがコンソールに出ない時の確認手順 2026-10-07 21:54:02
- MySQLにおける中央値(Median)の導き方(バージョン8未満) 2026-10-07 13:49:45
- getInputForward 2026-10-07 13:41:15
- JSONから配列に変換 2026-10-07 13:41:15
- ビューから値をモデルに格納しコントローラーで受け取る方法 2026-10-07 13:23:41
- Laravelのテーブル作成と定義変更|マイグレーション・up/down・注意点 2026-10-07 13:23:41
- NumPy 配列に要素を追加する方法 (append / concatenate) 2026-10-07 13:23:41
- MariaDB・MySQLで現在日時を取得する方法|NOW・タイムゾーン・保存型 2026-10-07 13:13:36
- 【django】テンプレートで定数を使用する方法 2026-10-07 13:10:15
- Spring BootにおけるApplication.propertiesの環境依存設定の分割方法 2026-10-07 12:09:35
- Not supported for DML operations【Springエラー】 2026-10-07 11:09:38