80

I'm working with XAMPP on Mac OS X.

I'm trying to run a Symfony website properly for a client, and I really don't know Symfony (yet). I just want to install and launch it.

I've changed my /etc/hosts file this way:

127.0.0.1 www.mysite.local

And the httpd.conf file this way:

<VirtualHost *:80>
  ServerName www.mysite.local
  DocumentRoot /Applications/MAMP/htdocs/mysite/web
  DirectoryIndex index.php
  <Directory /Applications/MAMP/htdocs/mysite/web>
    AllowOverride All
    Allow from All
  </Directory>
  Alias /sf /Applications/MAMP/htdocs/mysite/lib/vendor/symfony/data/web/sf
  <Directory "/Applications/MAMP/htdocs/mysite/lib/vendor/symfony/data/web/sf">
    AllowOverride All
    Allow from All
  </Directory>
</VirtualHost>

Now, the site is working (yay!), but I can't access any more any of my other local sites because localhost is rendered as www.mysite.local.

Where am I wrong?

Peter Mortensen
  • 30,738
  • 21
  • 105
  • 131
Angelica Rosa
  • 1,215
  • 1
  • 11
  • 15

12 Answers12

127

This worked for me!

To run projects like http://localhost/projectName:

<VirtualHost localhost:80>
   ServerAdmin localhost
    DocumentRoot path/to/htdocs/
    ServerName localhost
</VirtualHost>

To run projects like http://somewebsite.com locally:

<VirtualHost somewebsite.com:80>
     ServerAdmin webmaster@example.com
     DocumentRoot /path/to/htdocs/somewebsiteFolder
     ServerName www.somewebsite.com
     ServerAlias somewebsite.com
</VirtualHost>

The same for other websites:

<VirtualHost anothersite.local:80>
     ServerAdmin webmaster@example.com
     DocumentRoot /path/to/htdocs/anotherSiteFolder
     ServerName www.anothersite.local
     ServerAlias anothersite.com
</VirtualHost>
Peter Mortensen
  • 30,738
  • 21
  • 105
  • 131
Ganatra
  • 6,498
  • 3
  • 17
  • 16
32

localhost will always redirect to 127.0.0.1. You can trick this by naming your other VirtualHost to other local loop-back address, such as 127.0.0.2. Make sure you also change the corresponding hosts file to implement this.

For example, my httpd-vhosts.conf looks like this:

<VirtualHost 127.0.0.2:80>
    DocumentRoot "D:/6. App Data/XAMPP Shared/htdocs/intranet"
    ServerName intranet.dev
    ServerAlias www.intranet.dev
    ErrorLog "logs/intranet.dev-error.log"
    CustomLog "logs/intranet.dec-access.log" combined

    <Directory "D:/6. App Data/XAMPP Shared/htdocs/intranet">
        Options Indexes FollowSymLinks ExecCGI Includes
        Order allow,deny
        Allow from all
        AllowOverride All
        Require all granted
    </Directory>
</VirtualHost>

(Notice that in <VirtualHost> section I typed 127.0.0.2:80. It means that this block of VirtualHost will only affects requests to IP address 127.0.0.2 port 80, which is the default port for HTTP.

To route the name intranet.dev properly, my hosts entry line is like this:

127.0.0.2 intranet.dev

This way, it will prevent you from creating another VirtualHost block for localhost, which is unnecessary.

Jean-Rémy Revy
  • 5,607
  • 3
  • 39
  • 65
Saiful
  • 423
  • 5
  • 9
  • Using other local loop-back address is a very neat trick. Kudos! – Terix Jun 19 '15 at 08:53
  • 3
    Pro tip: Don't forget to change the `Listen` parameter in your `httpd.conf` to match your configured loopback addresses. – Noir Oct 09 '15 at 09:29
  • 1
    Yes! this using 127.0.0.2 (or .3 or .4, etc.) did the trick for me for testing sites on my local machine (Win 10, Apache, PHP7.2) which also use .htaccess Rewrite rules. Thank you! – Rob Banmeadows Aug 01 '18 at 11:54
25

This is normal if you see it. Since it is the first virtual host entry, it will show local host.

Let’s say for example you didn't want that page to show. All you want to show is the "Apache, it works" page, so you would make a vhost entry before mysite.local as local host and point it to the "it works" page.

But this is normal. I had this problem before, so don't worry!

Peter Mortensen
  • 30,738
  • 21
  • 105
  • 131
The Computer Hugger
  • 1,052
  • 8
  • 10
15

You may want to use this:

<VirtualHost *:80>
    DocumentRoot "somepath\Apache2.2\htdocs"
    ServerName localhost
</VirtualHost>
<VirtualHost *:80>

as your first virtual host (place it before other virtual hosts).

Peter Mortensen
  • 30,738
  • 21
  • 105
  • 131
John Smith
  • 151
  • 1
  • 2
10

I had the same issue of accessing localhost while working with virtualHost. I resolved it by adding the name in the virtualHost listen code like below:

In my hosts file, I have added the below code (C:\Windows\System32\drivers\etc\hosts) -

127.0.0.1   main_live

And in my httpd.conf I have added the below code:

<VirtualHost main_live:80>
    DocumentRoot H:/wamp/www/raj/main_live/
    ServerName main_live
</VirtualHost>

That's it. It works, and I can use both localhost, phpmyadmin, as well as main_live (my virtual project) simultaneously.

Peter Mortensen
  • 30,738
  • 21
  • 105
  • 131
Raj
  • 706
  • 8
  • 18
  • Worked for me. Thanks @Raj – madhan kumar Oct 26 '16 at 21:08
  • Modifying hosts file is important here. – Vohidjon Karimjonov Aug 29 '17 at 08:10
  • In my case, hitting main_live on browser did not work for the first time. then I tried http://main_live, it worked. then main_live (without http) started working. Very strange – Vohidjon Karimjonov Aug 29 '17 at 08:12
  • @Vohidjon Karimjonov : I think there is browser access permissions needed to work this. So may be you have permitted browser to listen request for "main_live" and then only it starts working as a website, else it is considered as just a keyword. So when you inserted http://main_live it looked for the host file for the entry of 'main_live' and if found then only browser will ask you for permissions, and if permission granted then you will get your virtual host working and loads your homepage of web application. Let it be it worked for you. that's great!!! – Raj Aug 31 '17 at 04:47
9

Additional description for John Smith's answer from the official documentation. To understand why it is.

Main host goes away

If you are adding virtual hosts to an existing web server, you must also create a block for the existing host. The ServerName and DocumentRoot included in this virtual host should be the same as the global ServerName and DocumentRoot. List this virtual host first in the configuration file so that it will act as the default host.

For example, to work properly with XAMPP, to prevent VirtualHost overriding the main host, add the follow lines into file httpd-vhosts.conf:

# Main host
<VirtualHost *:80>
    ServerName localhost
    DocumentRoot "/xampp/htdocs"
</VirtualHost>

# Additional host
<VirtualHost *:80>
    # Over directives there
</VirtualHost>
Peter Mortensen
  • 30,738
  • 21
  • 105
  • 131
SiZE
  • 2,217
  • 1
  • 13
  • 24
5

For someone doing everything described here and still can't access:

XAMPP with Apache 2.4:

In file httpd-vhost.conf:

<VirtualHost *>
    DocumentRoot "D:/xampp/htdocs/dir"
    ServerName something.dev
   <Directory "D:/xampp/htdocs/dir">
    Require all granted #apache v 2.4.4 uses just this
   </Directory>
</VirtualHost>

There isn't any need for a port, or an IP address here. Apache configures it on its own files. There isn't any need for NameVirtualHost *:80; it's deprecated. You can use it, but it doesn't make any difference.

Then to edit hosts, you must run Notepad as administrator (described below). If you were editing the file without doing this, you are editing a pseudo file, not the original (yes, it saves, etc., but it's not the real file)

In Windows:

Find the Notepad icon, right click, run as administrator, open file, go to C:/WINDOWS/system32/driver/etc/hosts, check "See all files", and open hosts.

If you were editing it before, probably you will see it's not the file you were previously editing when not running as administrator.

Then to check if Apache is reading your httpd-vhost.conf, go to folder xampFolder/apache/bin, Shift + right click, open a terminal command here, open XAMPP (as you usually do), start Apache, and then on the command line, type httpd -S. You will see a list of the virtual hosts. Just check if your something.dev is there.

Peter Mortensen
  • 30,738
  • 21
  • 105
  • 131
Renato Probst
  • 5,914
  • 2
  • 42
  • 45
3

According to this documentation: Name-based Virtual Host Support

You may be missing the following directive:

NameVirtualHost *:80
Bjarni Rúnar
  • 624
  • 4
  • 6
  • 1
    I've added the directive, but nothing change: when i open http://localhost/ i see the site configured as http://www.mysite.local. – Angelica Rosa Jun 12 '12 at 08:42
3

Just change <VirtualHost *:80> to <VirtualHost 127.0.0.1:80>.

Then the default DocumentRoot will serve for all domains or IP addresses that point to your server and specified VirtualHost will work.

Peter Mortensen
  • 30,738
  • 21
  • 105
  • 131
SaEEd
  • 41
  • 2
1

It may be because your web folder (as mentioned "/Applications/MAMP/htdocs/mysite/web") is empty.

My suggestion is first to make your project and then work on making the virtual host.

I went with a similar situation. I was using an empty folder in the DocumentRoot in httpd-vhosts.confiz and I couldn't access my shahg101.com site.

Peter Mortensen
  • 30,738
  • 21
  • 105
  • 131
Shahmir
  • 366
  • 5
  • 6
  • 1
    may is not a clear answer, help using exact solution – Mostafiz Apr 27 '16 at 07:53
  • Virtual drive will not be created unless u have INDEX.php in the folder, so I was saying that your folder may be empty (containing no index.php file) – Shahmir May 01 '16 at 05:19
0

I am running Ubuntu 16.04 (Xenial Xerus). This is what worked for me:

  1. Open up a terminal and cd to /etc/apache2/sites-available. There you will find a file called 000-default.conf.
  2. Copy that file: cp 000-default.conf example.local.conf
  3. Open that new file (I use Nano; use what you are comfortable with).
  4. You will see a lot of commented lines, which you can delete.
  5. Change <VirtualHost *:80> to <VirtualHost example.local:80>
  6. Change the document root to reflect the location of your files.
  7. Add the following line: ServerName example.local And if you need to, add this line: ServerAlias www.example.local
  8. Save the file and restart Apache: service Apache2 restart

Open a browser and navigate to example.local. You should see your website.

Peter Mortensen
  • 30,738
  • 21
  • 105
  • 131
Kenneth Odle
  • 71
  • 1
  • 10
0

For anyone using Windows and the Bitnami WAMP Stack Manager Tool this virtual host configuration should go into Bitnami\apache2\conf\bitnami\bitnami.conf

Note: Some settings in Directory section is not a must.

For example, my virtual host configuration for site.com would be as follows:

<VirtualHost site.com:80>
  DocumentRoot "C:/Bitnami/apache2/htdocs/site/docroot"

  <Directory "C:/Bitnami/apache2/htdocs/site/docroot">
    Options Indexes FollowSymLinks
    AllowOverride All
    <IfVersion < 2.3 >
      Order allow,deny
      Allow from all
    </IfVersion>
    <IfVersion >= 2.3 >
      Require all granted
    </IfVersion>
  </Directory>
</VirtualHost>

Remember that configuration for vhost as mentioned, by other friends, sagits's answer is needed.

Peter Mortensen
  • 30,738
  • 21
  • 105
  • 131
Naser Nikzad
  • 713
  • 12
  • 27