ぜんぶなんとかなる

ふしみの雑文

localhost で virtualDocumentRoot

いちいちサブドメイン切るのがだるいので、このサーバでは httpd.conf にこんな感じで書いてる

ServerName sidestepism.com
ServerAlias *.sidestepism.com

RewriteEngine on
RewriteCond /var/www/html/sidestepism.com/%{HTTP_HOST}/web !-d
RewriteRule ^ http://sidestepism.com/ [R=permanent,L]

UseCanonicalName Off
VirtualDocumentRoot /var/www/html/sidestepism.com/%0/web

これで、/var/www/html/sidestepism.com/***.sidestepism.com/web というディレクトリを作るだけでそこをDocumentRootとするサブドメインを作れる。

localhostでも、hoge.localhost みたいに気軽にサブドメインを作れたら便利だ。/etc/hosts ファイルに

127.0.0.1   hoge.localhost

と書けばいいような気がするが、ワイルドカードには対応していないのでいちいち sudo vi /etc/hosts とかやらなきゃいけなくてめんどくさい。ディレクトリ切るだけがいい。

こういう pac ファイルを作って、動的プロキシ指定に使うことにした。

function FindProxyForURL(url, host) {
if (shExpMatch(host, “*.loc”)) {
return “PROXY localhost”;
}
if (shExpMatch(host, “localhost”)) {
return “PROXY localhost”;
}
return “DIRECT”;
}

.localhost だと長くて打つのが疲れるので .loc にした。これで、hoge.loc で localhost にアクセスできる。

あとは apache の設定。

<virtualhost *:80>
ServerName server.loc
ServerAlias *.loc

UseCanonicalName Off
VirtualDocumentRoot /Users/ryohei/Sites/%1/web
</virtualhost>

これで、 /Users/ryohei/Sites/hoge/web にディレクトリを作るだけで hoge.loc というドメインからアクセスできるようになった。

(追記)

この方法では、apacheをプロクシサーバとして認識させているので、REQUEST_URI に “http://… ” の文字列がわたってしまう。普通は REQUEST_URIスキーマやホストは含まれないので、誤動作するスクリプトがある。

apache から送られてきた REQUEST_URI を使うようなコードを使う場合は、以下のように書き換える必要がある(phpの例)。

if(mb_ereg_match(‘https?://’, $_SERVER['REQUEST_URI'])){
$_SERVER['REQUEST_URI'] = mb_ereg_replace(‘https?://’.$_SERVER['HTTP_HOST'], ”, $_SERVER['REQUEST_URI']);
};

ここはハマると見つけづらいので注意。