How To Set Up Apache Virtual Hosts on XAMPP (Windows) [closed]

You need to follow some steps to create a virtual host in windows with apache.

Note: To start with, the only difference for this guideline, between XAMPP and WAMP or other Apache packages for Windows, is a question about where those packages are installed on your computer.

Introduction: vhost (virtual host) is a great solution if you intend to develop many independent projects in PHP and keep them isolated from each other, like:

  • Project 1 is based on PHP and has the local URL address php.localhost
  • Project 2 is a Laravel project with URL laravel.localhost
  • Project 3 is a Codeigniter with URL codeigniter.localhost
  • Project 4 is a WordPress with URL wordpress.localhost

You are expected to have installed the latest version of XAMPP/WAMP. Btw, in my case, I have only installed Apache and MySQL.

*Note: By default, most web servers will use port 80 as the default port, in some situations if you have another web server installed like (Microsoft IIS), it uses port 80 as well OR in other cases, SKYPE does also sometimes use port 80 like it is the case for some in Windows 8/10 for some users, in that case, you can do two thing’s

  • Change your Apache port to port 8080, 8081 etc., or some other free ports (note: 8080 can sometimes also give some problems)
  • OR Change your other software/IIS port and keep Apache to default port 80 in case of Skype, just kill the Skype app and restart it after installing Apache on port 80, and Skype will automatically get a new port.

I have chosen to change my Apache to port 8080.

Note:

  • For the next section, we need to use a text editor like notepad or regular IDE. I used a sublime text editor.
  • If you keep Apache to default port 80, skip this part and move on to Virtual hosts

Change XAMPP/WAMP port (only if necessary)
if left default, then jump to Setting virtual host

Step 1. Edit httpd.conf

Click on Config -> Apache (httpd.conf)
Or you find the file here C:\XAMPP\apache\conf\httpd.conf, C:\XAMPP\apache2\conf\httpd.conf, C:\Bitnami\wampstack\apache\conf\httpd.conf or C:\Bitnami\wampstack\apache2\conf\httpd.conf or similar location.

Change the line with

Listen 80

To 8080 or other, free ports.

Listen 8080

While we have httpd.conf file open we need to ensure that httpd-vhosts.conf is included:
Include conf/extra/httpd-vhosts.conf

Virtual hosts

Note: By default server documents are located on C:\XAMPP\htdocs or C:\Bitnami\wampstack\apache2\htdocs that’s fine if you have only one project or many small test files. However, if you need to develop many projects then it suggested separating them by the virtual host, as mentioned earlier.

Step 2. Setting Virtual host

  1. Create a folder for your projects; I have created one in c:\vhost you can call it projects etc.
  2. In c:\vhost folder we create a sub-folder domain1 or project1 or any other, it is up to you (c:\vhost\project1)
  3. Open httpd-vhosts.conf file C:\XAMPP\apache\conf\extra\httpd-vhosts.conf Add the following code in line depending on how many vhost you want to create:
<Directory C:/vhost>
    AllowOverride All
    Require all granted
</Directory>

#this is the default address of XAMPP    
<VirtualHost *:8080>
    DocumentRoot "C:/XAMPP/htdocs/"
    ServerName localhost
</VirtualHost>

#this is the first vhost address in XAMPP
<VirtualHost *:8080>
    DocumentRoot "C:/vhost/project1/"
    ServerName php.localhost
    SetEnv NS_ENV variable_value
</VirtualHost>

#this is the second vhost address in XAMPP for project like Laravel
<VirtualHost *:8080>
    DocumentRoot "C:/vhost/Laravel-Blog/public"
    ServerName laravel.localhost
</VirtualHost>

etc

Note: If you work on Laravel projects you can create unlimited Laravel projects as well as other frameworks like CodeIgniter, Yii, etc., the point is to
have your Laravel project/s on c:\vhost\laravel1,
c:\vhost\laravel2 etc and make c:\vhost\laravel1\public as
DocumentRoot etc as shown before. Each Laravel project will have own
VirtualHost URL.

Save and close the file

Some additional information and notes:

  • If the port remains default 80 then the URL address will be localhost
  • If the port remains default 80 then the VirtualHost tag should be changed to <VirtualHost *:80>
  • If the port is changed to 8080, the URL address will be localhost:8080
  • And the vhost URL address could look like this project1.localhost:8080 etc
  • You can add unlimited projects and virtual hosts this way.

We are not ready yet, read more.

Step 3. Edit Windows Host file

  1. Stop Apache and MySQL services from XAMPP/WAMP.
  2. Open the hosts file in C:\windows\system32\drivers\etc
    you need Administrator privilege to edit the file.
    I suggest editing the file directly with the Sublime text editor.
  3. Add 127.0.0.1 project1.localhost at the end of the file, and Save and close the file.
127.0.0.1       localhost
127.0.0.1       php.localhost
127.0.0.1       laravel.localhost
127.0.0.1       codeigniter.localhost
127.0.0.1       wordpress.localhost
127.0.0.1       laravel2.localhost
etc. those are just examples

save the file

Final Step.
Start/Re-start your Apache and MySQL again.


**Addition (Suggestion)**

Note: Under your development process you might face a problem having a cache on because you can risk updating something in Laravel and it won’t appear in your browser. Therefore you might need to disable PHP cache under the development process in your local environment.

Open file php.ini under PHP folder in your Apache (XAMPP or WAMP) folder and
change opcache.enable to 0 so it looks like this:

[opcache]
zend_extension=php_opcache.dll
; Determines if Zend OPCache is enabled
opcache.enable=0

Addition (Alternative solution)

Important: The following solution is not suitable to test Restful Api, canvas, heavy solutions, etc.it might give you some headaches, so I would suggest a virtual host solution with port 80 as default.

It is possible to deploy a temporary Virtual Server without necessarily configuring XAMPP/WAMP Virtual Host, start the CMD console, and run the following PHP command:

php -S localhost:8001 -t c:\vhost\Laravel-Project\public
  • Port 8001 can be changed to any available port number and be sure not to conflict with other software ports.
  • c:\vhost\Laravel... path should be changed to whatever your project path.
  • It is possible to start multiple servers but should have different port numbers.

In your browser, you need only to write

http://localhost:8001/

Note on 403 Access forbidden error

If you get a 403 Access forbidden error when you browse your site, you may need to add this to your httpd.conf file:

<Directory path_to_dir>
    AllowOverride none
    Require all granted
</Directory>

Leave a Comment