Set up a Windows test server using XAMPP (with multiple virtual hosts)
XAMPP for Windows makes setting up a local test server on your computer very easy. As well as
providing the WAMP stack (Windows, Apache, MySQL and PHP) it includes both PHP versions
4.x and 5.x. It also includes PHPMyAdmin which is very useful for dealing with your MySQL
databases.
The following instructions describe XAMPP configuration in some detail. A quickstart guide is also
available.
(NOTE: XAMPP is only intended for use as a local test server which is available on your own
computer. It has been created for ease-of-use, but not for production level security. If you want to
tinker with security here is a guide about making XAMPP secure.)
Installation
The installation of XAMPP is very straightforward. Rather than repeat the installation instructions
here, just follow the instructions on the XAMPP site. Instructions for setting up a XAMPP server
with Drupal can be found on this page.
Once you have downloaded and installed the package you may like to do some further
configuration...
Configuring XAMPP
Creating virtual hosts
If you do not want to keep your files in the xampp/htdocs directory and type in a long URL for
every page load, you can create virtual hosts for each of your sites instead. For example, you may
like to keep all your sites in your My Documents folder for easy backup. Or you could create a root
directory on your hard drive such as C:/sites/example/ which will make using shell commands
easier. Wherever you choose to store your sites, you can always easily move them at a later date.
With XAMPP you set up virtual hosts in the following file:
/xampp/apache/conf/extra/httpd-vhost.conf
Open up that document in your text editor and append the following information to the bottom:
NameVirtualHost 127.0.0.1:80
<VirtualHost 127.0.0.1:80>
DocumentRoot "C:/xampp/htdocs/"
ServerName localhost
</VirtualHost>
The above only needs to be added once and you don't need to change any details to the above.
The next step, however, needs to be carried out for each site. Copy the code below and add it to the
bottom of the file.
<VirtualHost example.local>
DocumentRoot "C:/path/to/your/site"
ServerName example.local
CustomLog "C:/path/to/your/site/logs/example.local.access.log" combined
ErrorLog "C:/path/to/your/site/logs/example.local.error.log"
<Directory "C:/path/to/your/site">
Options Indexes FollowSymLinks
AllowOverride All
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
You will need to make some alterations for your personal setup. Check that you have used only
forward slashes.
Where it says example.local put the URL you would like to type into your browser to find your
site. You can call this what you like, but make sure it relates to the site you are creating and is not a
real URL that you may like to access on the Internet otherwise you will get a namespace clash.
Using the production site's URL but replacing .com or whatever with .local works well.
Where it says "C:/path/to/your/site" add the directory where your site is going to be stored on
your local drive. Note that you should NOT include a slash on the end of the path. You can also set
up a place to keep error and access logs for these sites. You will need to create the directory
structure for these manually, but not the individual files (i.e. create the directory structure
C:/path/to/your/site/logs but Apache will create the example.local.error.log file for you).
If you are using a portable installation of XAMPP, you may like to try adding this instead:
<VirtualHost 127.0.0.1:80>
DocumentRoot "/path/to/your/site"
ServerName example.local
...
...
</VirtualHost>
Finally you must include the domain names in your Windows host file. This file can be found at:
C:/WINDOWS/system32/drivers/etc/hosts
open this file in your text editor and add:
127.0.0.1 example.local
You can repeat this procedure for as many sites as you wish.
When you are done, restart Apache.
Clean URLs
You will also probably want to enable clean urls. To do this in XAMPP, open up xampp\apache\
conf\httpd.conf and find this line:
#LoadModule rewrite_module modules/mod_rewrite.so
and uncomment it by deleting the hash (#) so that it reads:
LoadModule rewrite_module modules/mod_rewrite.so
Restart Apache and test that clean URLs work on your site. If this doesn't work for some reason,
follow the instructions on this handbook page.
Comments
log files
If you don't have directories setup for log files and you have these lines in:
CustomLog "C:\path\to\your\site\logs\example.local.access.log" combined
ErrorLog "C:\path\to\your\site\logs\example.local.error.log"
Apache won't start. If you're not sure if it's not restarting because of this, check your Apache error
logs here: C:\xampp\apache\logs\error.log
If you want to make sure you didn't put something in wrong in your Apache configuration files,
open the Command Prompt, go to c:\xampp\apache\bin and type apache -S for Apache to check
your config files.
log directory and files can be created manually!
if the apache is not starting because of the error log configuration, you can manually create the log
directory and the files and try restarting! usually it can be a read/write permission error also in
windows!
Got it working at last
I am using XAMPP 1.7.3. Had wasted a lot of time until I found this post.
Most of the other posts suggests that the "NameVirtualHost" be
NameVirtualHost *:80
But it didn't work for me as it kept directing me to the web root for all the virtual hosts.
So please take care to put this line properly.
NameVirtualHost 127.0.0.1:80
worked for me.
But it would be great if someone can explain the cause.
I will also try to find the reason and get back.