An Apache name based virtual host (NameVirtualHost) tutorial

Apache virtual hosting FAQ: How do I configure Apache to run multiple virtual hosts (name-based virtual hosts)?

An Apache name-based virtual host (NameVirtualHost) tutorial: As a quick reminder to myself for something I just did using MAMP on my Mac OS X system, here's how I configured the MAMP Apache server to use name based virtual hosting for two websites that I'm developing at the same time.

Adding host names to /etc/hosts

The two website projects I'm working on are named "drupal7" and "codeme", so I added these entries to my /etc/hosts file:

127.0.0.1 drupal7 codeme

Note that on a Mac OS X system you have to edit that file like this:

sudo vi /etc/hosts

To test that this works I then pinged these new names:

ping drupal7
ping codeme

Since I have my firewall set up I actually just get a "request timeout" message, but that's good enough for me.

Apache name based virtual host (NameVirtualHost) setup

Next, I add the Apache name based virtual host configuration by editing the MAMP Apache conf file:

vi /Applications/MAMP/conf/apache/httpd.conf

At the bottom of the file I add these lines, one for my "codeme" project, and another for my "drupal7" project. As you can see from the DocumentRoot entries, these projects are in different folders under the MAMP htdocs folder:

NameVirtualHost 127.0.0.1

<VirtualHost 127.0.0.1>
    ServerName codeme
    DocumentRoot /Applications/MAMP/htdocs/codeme
    SetEnv APPLICATION_ENV "development"
    <Directory /Applications/MAMP/htdocs/codeme>
        DirectoryIndex index.php
        AllowOverride All
        Order allow,deny
        Allow from all
    </Directory>
</VirtualHost>

<VirtualHost 127.0.0.1>
    ServerName drupal7
    DocumentRoot /Applications/MAMP/htdocs/drupal7
    SetEnv APPLICATION_ENV "development"
    <Directory /Applications/MAMP/htdocs/drupal7>
        DirectoryIndex index.php
        AllowOverride All
        Order allow,deny
        Allow from all
    </Directory>
</VirtualHost>

After this, I restarted MAMP, and went to the following URLs, and everything worked just fine:

http://drupal7:8888/

and

http://codeme:8888/

The 8888 port shown is the default MAMP port. You can change that as desired, but it works for me.

Apache name based virtual host (NameVirtualHost) summary

I hope this Apache name based virtual host configuration tutorial has been helpful. As much as anything I wanted to put it out here as a "reminder to self" about how to do this. If this tutorial doesn’t help, I just noticed in 2020 that I wrote another tutorial titled, Apache NameVirtualHost configuration using MAMP on MacOS, and it uses some slightly different techniques in the Apache configuration file.

For more information, please see the Apache NameVirtualHost directive docs.