Mac
Apache
mamp

MAMPでバーチャルホストを設定したときのメモ

MAMPでは、設定からドキュメントルートを変更できます。が、複数プロジェクトを切り替える場合に毎回設定を変更して再起動するのは面倒です。

なので、ポートでバーチャルホストを設定して、各ポートにプロジェクトを割り振るという方法で対応します。

環境

  • macOS Sierra 10.12.6
  • MAMP 4.1.1

前提

以下のようなプロジェクト(ドキュメントルート)があるとします。

  • project_a (/Users/hogehoge/Projects/project_a/html)
  • project_b (/Users/hogehoge/Projects/project_b/html)
  • project_c (/Users/hogehoge/Projects/project_c/html)

それぞれ、ドキュメントルート配下に次のようなhtmlファイルが置いてあるとします。

index.html
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>PROJECT A</title>
</head>
<body>
    <h1>プロジェクト A です</h1>
</body>
</html>

MAMPの設定ファイル変更

変更するファイルは次の2つ

  • /Applications/MAMP/conf/apache/httpd.conf
  • /Applications/MAMP/conf/apache/extra/httpd-vhosts.conf

/Applications/MAMP/conf/apache/httpd.conf は、下記部分を有効にします。

httpd.conf
# Virtual hosts
- #Include /Applications/MAMP/conf/apache/extra/httpd-vhosts.conf
+ Include /Applications/MAMP/conf/apache/extra/httpd-vhosts.conf

/Applications/MAMP/conf/apache/extra/httpd-vhosts.conf には下記の記述を末尾に追加します。

httpd-vhosts.conf
Listen 8001
<VirtualHost *:8001>
    DocumentRoot "/Users/hogehoge/Projects/project_a/html"
    <Directory "/Users/hogehoge/Projects/project_a/html">
        AllowOverride All
    </Directory>
</VirtualHost>

Listen 8002
<VirtualHost *:8002>
    DocumentRoot "/Users/hogehoge/Projects/project_b/html"
    <Directory "/Users/hogehoge/Projects/project_b/html">
        AllowOverride All
    </Directory>
</VirtualHost>

Listen 8003
<VirtualHost *:8003>
    DocumentRoot "/Users/hogehoge/Projects/project_c/html"
    <Directory "/Users/hogehoge/Projects/project_c/html">
        AllowOverride All
    </Directory>
</VirtualHost>

アクセスしてみる

設定ファイルを変更したらMAMPでサーバを再起動して、それぞれのポートにアクセスします。

  • localhost:8001
    sc 2017-12-13 11.17.32.png

  • localhost:8002
    sc 2017-12-13 11.17.37.png

  • localhost:8003
    sc 2017-12-13 11.17.43.png

さらにhostsでの切り替えを試してみた(無理でした)

ポートでの切り替えができるようになったものの、localhost:8001 ではどのプロジェクトなのかわからないので、hostsで下記のような設定をしてみました。

/etc/hosts
127.0.0.1:8001 local.project_a.com
127.0.0.1:8002 local.project_b.com
127.0.0.1:8003 local.project_c.com

が、うまくいきません。
調べたところ、hostsで解決できるのはIPアドレスまでで、ポートの値までは解決できないようです。