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']);
};
ここはハマると見つけづらいので注意。