前回の続き。関連ページがいくつかあるので
インデックスも参照のこと。
ここでも %ECLIPSE_HOME_PARENT% は Eclipse のインストールフォルダの親(Eclipse の実行ファイルのパスが c:\user\xampp\eclipse\eclipse.exe なら %ECLIPSE_HOME_PARENT% は c:\user\xampp)とする。
さて XAMPP のおかげで HTTP サーバである Apache はすでに使える状態になっている。
しかしこの状態で http://localhost/ にアクセスすると問答無用で XAMPP のデモページが表示されてしまう。これは実開発上、あまり都合がよくない。
かといって XAMPP のデモページはいろいろと参考になるので、これを消してしまうのは忍びない。
そこで、下記のように振り分けられる方法を考えてみた。
URL |
ローカルパス |
備考 |
http://localhost/ |
%DOC_ROOT% |
ドキュメントルート |
http://localhost/xampp/ |
%ECLIPSE_HOME_PARENT%\xampp\htdocs\xampp |
XAMPP のデモページ |
http://localhost/~<プロジェクト名>/ |
%WORK_DIR%\<プロジェクト名>\htdocs |
各プロジェクトのトップページ |
ここで %DOC_ROOT% はローカルの任意のフォルダ、 %WORK_DIR% は Eclipse のワークスペースフォルダーを指す。ただしセキュリティの観点から、%DOC_ROOT% と %WORK_DIR% を一致させないとする。
で、各プロジェクトの基本的なディレクトリ構成は以下のようにしたい。
\%WORK_DIR%
+- \<プロジェクト名>
+- \htdoc 表示用のHTMLなど
+- \scripts ビジネスロジック
+- \tests テストコード
これらを総合すると、 %ECLIPSE_HOME_PARENT%\xampp\apache\conf\httpd.conf は以下のように修正することになった。
なお、%WORK_DIR% などは適時読み替えること。
また行番号は修正前のものなので注意。特に「319行目」は、実際にはかなりずれるはず。
182行目あたり
DocumentRoot の行を以下に書き換え
DocumentRoot "%DOC_ROOT%"
239行目あたり
既存の Directory ブロックの外に、以下の Directory ブロックを追加
<Directory "%DOC_ROOT%">
Options Indexes FollowSymLinks Includes ExecCGI
AllowOverride All
Order allow,deny
Allow from all
</Directory>
319行目あたり
<IfModule alias_module> ブロックの中に以下を追加
Alias /xampp "%ECLIPSE_HOME_PARENT%/xampp/htdocs/xampp"
AliasMatch ^/~(\w+)$ "%WORK_DIR%/$1/htdocs"
AliasMatch ^/~(\w+)(/.*)$ "%WORK_DIR%/$1/htdocs$2"
<Directory "%WORK_DIR%/*/htdocs">
Options Indexes FollowSymLinks Includes ExecCGI
AllowOverride All
Order allow,deny
Allow from all
</Directory>
ここで、各設定項目の意味を簡単に解説してみる。詳細は Apache のドキュメントなどを参照のこと。
DocumentRoot
ドキュメントルート。URL を解釈するときの起点になる。
Alias
エイリアス。実ディレクトリを仮想ディレクトリとしてマッピングするために使用する。実ディレクトリはドキュメントルート以下にある必要はない。たとえば DocumentRoot が c:\www と設定されている場合、 http://localhost/image は c:\www\image を指す。しかし Alias /xampp c:\user\xampp と設定してあると、http://localhost/xampp は c:\www\xampp ではなく c:\user\xampp を指すようになる。
AliasMatch
正規表現対応のエイリアス。http://localhost/~aaa/ でアクセスするなら下だけでいいが、/~aaa までだと上の設定も必要。GET データをちゃんと取れることも確認した。
2010/01/08追記
AliasMatch は Alias よりも後に書いた方がよい。
マッチングは先取り優先なので、Alias で定義したエイリアス文字列が AliasMatch のパターンマッチに引っかかるようなケースでは Alias を後に書くと意図しない動作を起こすことがある。
たとえば "~" 付きの URL を設定する場合に考慮が必要になるかもしれない。
Directory
指定したディレクトリのアクセス権限などを設定する。