• このエントリーをはてなブックマークに追加

きっかけ

複数サイトを持っていると、ローカルでテストする時にパスがネックになってくる。
例えば、以下のようなサイトがあるとする。

  • sample1
  • sample2
  • sample3

で、sample1はexample.com、sample2はexample.net、sample1はexample.orgとそれぞれ3つのサイトのファイル転送をしている。
そこで、sample1では画像を/images/xxx.jpgとひっぱりたくなった。しかし、ローカル上では/始まりのパスだとうまく表示できない。

example.comに参照したい画像が入っていたら、フルパスで指定して、/images/xxx.jpgでよいが、example.netから参照する場合には引っ張ってこれない。

sample2やsample3も同じだ。

解決

そこで登場するのがバーチャルホストという機能。

何をするものかというと、URLをApache側・hosts側で色々設定すると、あたかもサイトを3つ持っているかのように動かすことができる。
http://example1/とかhttp://example-example/とかね。.jpとか付けちゃうと外に見に行けなくなるので注意が必要だけどw。

具体的な方法

  1. Apacheの設定:httpd.confにバーチャルホストを使うための記述を明記(コメントアウトを外す)
  2. バーチャルホストの定義

まずはじめに、Apacheの設定から。

  1. Apacheのインストールしてあるフォルダ(C:Apacheとか)にconfというフォルダがあるので開く
  2. 次に、httpd.confというファイルを開く。まぁ、インストールしたことがあれば、わかるかもしれないですが
  3. 一応httpd.confはバックアップのためにコピーをとる
  4. httpd.confをエディタで開く
  5. #Include conf/extra/httpd-vhosts.confと記述してあるところがあるので、#を外す。(#はコメントを意味します)
    これによってバーチャルホストが動くようになります。※Apache2.2で動作確認
  6. 次に、NameVirtualHost *:80という記述を一番下に追加
  7. その次に、下のコードをまるごとコピーして、一番下に追加。 <VirtualHost *:80> DocumentRoot "C:/example1/" ServerName example1 ErrorLog logs/sample-error.log TransferLog logs/sample-access.log <Directory "C:/example1"> Options FollowSymLinks AllowOverride None Order allow,deny Allow from all </Directory> </VirtualHost>
  8. コードを適宜使用しているディレクトリと、サーバー名に変える

httpd.confのファイル内の確認です。

バーチャルホストの設定部

# Virtual hosts
conf/extra/httpd-vhosts.conf

上記のような感じで。

バーチャルホストの定義

NameVirtualHost *:80
<VirtualHost *:80>
DocumentRoot  "C:/example1/"
ServerName example1
ErrorLog logs/sample-error.log
TransferLog logs/sample-access.log
<Directory "C:/example1">
Options FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>
</VirtualHost>

上記のような感じで。

で、NameVirtualHostはIPアドレスとポートを入れるみたい。example.com:80みたいな感じ。*だと全てのアドレスにマッチという意味になります。
ローカルでのテストだけを想定しているので、*でいいと思います。
VirtualHostも同じく。
DocumentRootはドキュメントの場所を指定。Apacheを設定されたことがあればわかりますよね。
ServerNameですが、これはhttp://のあとに続く任意(自由)な文字を入れられます。自分で名前が付けられる・・・。わくわくしますね!えーと、認められていなさそうな文字、例えば日本語とかはやめましょう。多分やばいので。

  • ErrorLogはエラーログ
  • TransferLogはアクセスログ
  • Directoryは仮想ディレクトリ指定
  • Options FollowSymLinksはシンボリックリンクを許可。
  • AllowOverride None .htaccessを許可しない
  • Order allow,deny allowで明記されたアクセスを許可
  • Allow from all すべてのアクセスを許可
  • つまりは、allowではすべてOKとしているので、全てのアクセスをOKにしているということ。

で、上記のようなブロックを下へ下へ追加していけば増やせます。

保存したらApacheを再起動。エラーが出たらチェックして直す。

hosts

WindowsにはIPアドレスで指定したドメインにアクセスをかけられるようになっている。その設定のできるファイルがhosts。
場所は「C:WINDOWS/system32/drivers/etc」にあります。
hostsという拡張子のないファイルをエディタにドラッグするか何かして開きます。初期状態だと、ロックされているので右クリックしてロックを解除するか書き込みの許可を与えたのちにこのファイルの編集・保存を行います。

ファイルを開いたら、ちょこちょこ英語の書いてあるものが開きます。
127.0.0.1 localhostみたいな感じで最後に入っていたり入っていなかったりしますが、その後ろにIPアドレス ドメインを指定します。
ここで指定するのが、先ほど指定した名前です。example1なら、127.0.0.1 example1と入れます。

「127.0.0.1 localhost example1 example2」としてもOK

127.0.0.1 localhost
127.0.0.1 localhost example1 example2
127.0.0.1 example.com
127.0.0.1 example.net
127.0.0.1 example.com example.net
192.168.0.2 example.org

保存したら、http://example1/にアクセス。動くはずです。

蛇足ですが、指定を例えば、www.yahoo.co.jpとするとYahoo!は表示されずにローカルのファイルを表示。なんてことができちゃいます。
これを悪く利用して、変なところにアクセスしにいくように設定させることもできます。

そのため、hostsのファイルはウィルス対策ソフトで書き換えが行えないようになっていたり、Windowsでは最初から書き換え権限が与えられていません。

これを開いたときに怪しげなIPアドレスが並んでいたら削除して綺麗にした方がいいかも。