OSX Mavericks - Set up Apache with subdomains - php

I have successfully set up a local server running PHP on my Mac, but I am having trouble setting up extra local sites as subdomains (i.e. site2.localhost)
Here's what I have so far:
hosts file:
##
# Host Database
#
# localhost is used to configure the loopback interface
# when the system is booting. Do not change this entry.
##
127.0.0.1 localhost
127.0.0.1 site2.localhost
255.255.255.255 broadcasthost
::1 localhost
fe80::1%lo0 localhost
httpd-vhosts.conf:
NameVirtualHost *:80
<VirtualHost *:80>
DocumentRoot "/Users/user/Sites/site2"
ServerName site2.localhost
</VirtualHost>
and I've uncommented the following line in the httpd.conf file:
Include /private/etc/apache2/extra/httpd-vhosts.conf
I'm not sure what else I need to add or where I need to add it.

OK, seems as if I needed to look a little harder... It was in fact set up correctly, but for some reason when I typed site2.localhost into the browser it was defaulting to https.
By manually typing in http://site2.localhost it works fine.

Related

How do you create virtual hosts (that also use SSL) on localhost with MAMP and Apache?

Suppose you have a local project at /Users/yourname/Sites/example and want to be able to use both http://example.local and https://example.local to reach it on your Mac, using MAMP (I'm using MAMP version 6.6).
Read the answer for the steps to take.
1) Add your custom domain to the hosts file
Open the Finder and choose the Go to folder command from the Go menu. Enter /private/etc/hosts as the path; this will open a Finder window where you will find the hosts file.
Open the hosts file and map your custom domain to 127.0.0.1 (localhost):
127.0.0.1 localhost
127.0.0.1 example.local
Now, when you visit http://example.local, the browser will redirect you to localhost and show your list of local sites (which is not what we want yet, but hey, this is just the first step).
2) Configure MAMP to use Apache's and MySql's default ports
Open MAMP, click on Preferences, then go the Ports tab. By default, MAMP uses port 8888 for Apache and 8889 for MySQL, but it gives you the option to use Apache's default port (80) as well as MySQL's default port (3306): click the 80 & 3306 button to use these ports rather than 8888 and 8889.
3) Enable virtual hosts in Apache
Go to and open the /Applications/MAMP/conf/apache/httpd.conf file. Look for this line:
# Include /Applications/MAMP/conf/apache/extra/httpd-vhosts.conf
Uncomment the line by removing the asterisk at the beginning: uncommenting the line enables virtual hosts. (If the line is already uncommented, you're good to go for this step).
4) Configure Apache to listen to port 80
While you have /Applications/MAMP/conf/apache/httpd.conf open, also look for this line:
Listen 8888
and change it to
Listen 80
Listen 443
In the previous step, you told MAMP to use port 80 for Apache, so the first line tells Apache to listen to port 80 rather than port 8888; the second line tells Apache to also listen to requests incoming on port 443: this is the port typically used by SSL connections, so it is an essential step to be able to reach your local site at https:// besides http://.
5) Create a SSL certificate for your local site
You need a SSL certificate to be able to reach your site at https://example.local as well. This can be easily done using the mkcert tool. You can read the instructions on Github, but basically it's about installing the tool, then running:
$ mkcert example.local
This generates two files: a certificate (example.local.pem) and a certificate key (example.local-key.pem).
Move these two files somewhere within your project. For example, you could create a hidden folder at the root of your project called .crt and put them in there.
6) Create a virtual host for your local site
Finally, it's time to actually create a virtual host for your local site. Go to and open the /Applications/MAMP/conf/apache/extra/httpd-vhosts.conf file and include the following:
// These first two lines tell Apache to check for virtual hosts
// whenever a request comes in on port 80 (http://) or 443 (https://)
NameVirtualHost *:80
NameVirtualHost *:443
// This first directive tells Apache to serve the files at "/Users/yourname/Sites/example"
// whenever "http://example.local" is visited
<VirtualHost *:80>
ServerName example.local
DocumentRoot "/Users/yourname/Sites/example"
</VirtualHost>
// This second directive tells Apache to serve the files at "/Users/yourname/Sites/example"
// whenever "https://example.local" is visited, and provides paths to the certificates
// we previously created
<VirtualHost *:443>
ServerName example.local
DocumentRoot "/Users/yourname/Sites/example"
SSLEngine On
SSLCertificateFile "/Users/yourname/Sites/example/.crt/example.local.pem"
SSLCertificateKeyFile "/Users/yourname/Sites/example/.crt/example.local-key.pem"
</VirtualHost>
That's it! Now you can view your site at both http://example.local and https://example.local
(Remember to adapt the paths to wherever your project and certificates are located though).
7) Need virtual hosts for multiple local sites?
Want to add virtual hosts for more local sites you have, eg. for a site you want to reach at http://test.local?
Go to /private/etc/hosts and add 127.0.0.1 test.local
127.0.0.1 localhost
127.0.0.1 example.local
127.0.0.1 test.local
Generate SSL certificates with mkcert test.local (like we did earlier on step 4).
Finally, update the virtual hosts file as follows:
NameVirtualHost *:80
NameVirtualHost *:443
<VirtualHost *:80>
ServerName example.local
DocumentRoot "/Users/yourname/Sites/example"
</VirtualHost>
<VirtualHost *:443>
ServerName example.local
DocumentRoot "/Users/yourname/Sites/example"
SSLEngine On
SSLCertificateFile "/Users/yourname/Sites/example/.crt/example.local.pem"
SSLCertificateKeyFile "/Users/yourname/Sites/example/.crt/example.local-key.pem"
</VirtualHost>
// Basically, copy and paste the virtual hosts for the example project
// and update the domain and paths accordingly
<VirtualHost *:80>
ServerName test.local
DocumentRoot "/Users/yourname/Sites/test"
</VirtualHost>
<VirtualHost *:443>
ServerName test.local
DocumentRoot "/Users/yourname/Sites/test"
SSLEngine On
SSLCertificateFile "/Users/yourname/Sites/test/.crt/test.local.pem"
SSLCertificateKeyFile "/Users/yourname/Sites/test/.crt/test.local-key.pem"
</VirtualHost>
8) Bonus: add extra configuration to your virtual hosts
The VirtualHost directive can accept a number of extra instructions that tell Apache what to do when a certain request is received.
For instance, suppose our example project is a Node application that can be reached at http://localhost:3000, but we want to use http://example.local to access it. We would have to tell Apache to forward any request made to http://example.local to http://localhost:3000.
NameVirtualHost *:80
NameVirtualHost *:443
// This line loads a module that enables proxying (it's turned off by default)
LoadModule proxy_http_module modules/mod_proxy_http.so
// The ProxyPass and ProxyPassReverse lines tell Apache
// to forward the request to http:// and https://localhost:3000
<VirtualHost *:80>
ServerName example.local
DocumentRoot "/Users/yourname/Sites/example"
ProxyPass / http://localhost:3000/
ProxyPassReverse / http://localhost:3000/
</VirtualHost>
<VirtualHost *:443>
ServerName example.local
DocumentRoot "/Users/yourname/Sites/example"
SSLEngine On
SSLCertificateFile "/Users/yourname/Sites/example/.crt/example.local.pem"
SSLCertificateKeyFile "/Users/yourname/Sites/example/.crt/example.local-key.pem"
ProxyPass / http://localhost:3000/
ProxyPassReverse / http://localhost:3000/
</VirtualHost>

MAMP all virtual hosts point to htdocs folder

I've read through all the questions I could find but none of them have worked for me. I'm trying to set up a couple of virtual hosts on my MAMP apache install. Currently, typing localhost takes me to my htdocs as expected. However, typing mysite.dev should take me to another directory but it instead drops me off at htdocs.
hosts
##
# Host Database
#
#
# localhost is used to configure the lookback interface
# when the system is booting. Do not change this entry.
##
127.0.0.1 localhost
127.0.0.1 mysite.dev
255.255.255.255 broadcasthost
::1 localhost
fe80::1%lo0 localhost
I've uncommented in httpd.conf
# Virtual hosts
Include /Applications/MAMP/conf/apache/extra/httpd-vhosts.conf
And I've set up my httpd-vhosts.conf a bunch of different ways with the same result. The current state is:
# Use name-based virtual hosting.
#
NameVirtualHost *:80
<VirtualHost *:80>
ServerAdmin mysite.dev
DocumentRoot "/Applications/MAMP/htdocs/mysite/public"
ServerName mysite.dev
ServerAlias www.mysite.dev
ErrorLog "logs/mysite.dev"
CustomLog "logs/mysite.dev" common
</VirtualHost>
Any help would be greatly appreciated. Thanks!
You might miss some steps. First of all
run mamp with apache 80 and mysql 3306 port. this will automatically change the httpd.conf file with those port. close mamp
go to httpd.conf and go to line: 575 and uncomment this line from
# Include /Applications/MAMP/conf/apache/extra/httpd-vhosts.conf
to
Include /Applications/MAMP/conf/apache/extra/httpd-vhosts.conf
If it is not line 575 search with the text and u will find the line.
Next in httpd-vhosts.conf, add your virtual urls/hosts. sample below
<VirtualHost *:80>
DocumentRoot "/Applications/MAMP/htdocs/Project"
ServerName dev.project.com
ServerAlias www.dev.project.com
</VirtualHost>
dev.project.com is just sample and you can name it however you want. server alias is optional but better to keep it just likeserver name but with an extra "www." as it is shown above.
next add those to hosts file like
127.0.0.1 dev.project.com
better to add all possibilities like below
127.0.0.1 dev.project.com http://dev.project.com www.dev.project.com http://www.dev.project.com
save the hosts file and restart mamp. Cheers!!!
I THINK YOU GUYS MISSED STEP 2

Why I can't set a vhost for this PHP website on my XAMPP?

I am finding the following problem trying to create a vhost for a PHP website that I have into XAMPP.
So basically this is where is the index.php file of my website is deployed: C:\xampp\htdocs\MyProject-Panda
Then into the C:\xampp\apache\conf\extra\httpd-vhosts.conf** file I have declared 2 vhost:
<VirtualHost *:80>
DocumentRoot "C:/xampp/htdocs/HotelRegistration/public"
ServerName laravel.dev
</VirtualHost>
<VirtualHost *:80>
DocumentRoot "C:/xampp/htdocs/MyProject-Panda"
ServerName panda.dev
</VirtualHost>
(the first one works fine, the second one no).
Finally into the C:\Windows\System32\drivers\etc\hosts file I have:
127.0.0.1 localhost
127.0.0.1 laravel.dev
127.0.0.1 panda.dev
So I am enabling the panda.dev domain on my local machine.
The problem is that when I open the panda.dev domain into my browser it is automatically "rewrited" into http://www.panda.dev/ and it says that can't contact the server.
Why? What could be the problem? How can I try to solve this situation?
You should use .local for local sites. .dev must not be interpreted correctly by browsers, even if you have hosts record.
In this case I think problem is - you have some .htaceess in C:/xampp/htdocs/MyProject-Panda with redirect to WWW version. Windows hosts does not work for subdomains automaticly (as www.panda.dev is subdomain of panda.dev). You eighter has to remove this redirection or add 127.0.0.1 www.panda.dev record to your hosts file.

MAMP: How can I run both Vhost sites and default sites

So I enabled a vHost in my httpd.conf by enabling Include /Applications/MAMP/conf/apache/extra/httpd-vhosts.conf and in /etc/host I made entry as:
127.0.0.1 mydomain.com
Now even if I try localhost it goes to mydomain.com
In the MAMP Environment, Virtual Hosts are quite easy to implement. However, in your case you might have probably forgotten to add some entries to /Applications/MAMP/conf/apache/extra/httpd-vhosts.conf. Adding entries to the /etc/host alone is not enough and again (in your case) the line: 127.0.0.1 mydomain.com says that all requests (no matter which) should be forwarded to mydomain.com
Now to make this work the way you had expected, open up /Applications/MAMP/conf/apache/extra/httpd-vhosts.conf and add the following Entries:
# THIS ENSURES THAT localhost IS STILL INTACT...
<VirtualHost *:80>
DocumentRoot /Applications/MAMP/htdocs
ServerName localhost
</VirtualHost>
# THIS LOADS UP THE mydomain.com VIRTUAL HOST
<VirtualHost *:80>
ServerAdmin webmaster#mydomain.com
DocumentRoot "/Applications/MAMP/htdocs/mydomain"
ServerName mydomain.com
ServerAlias www.mydomain.com
ErrorLog "logs/mydomain-error_log"
CustomLog "logs/mydomain.com-access_log" common
</VirtualHost>
The Lines above ensures that when you call mydomain.com, the appropriate Virtual Host is loaded in this case the index File under /Applications/MAMP/htdocs/mydomain but still, calling localhost would load the default MAMP Welcome Page (except when configured otherwise).
IMPORTANT
Make sure (also) that in your hosts File, the entry: 127.0.0.1 localhost is there (preferably, as the first Entry). In other words, your hosts File is expected to look something like this:
##
# Host Database
#
# localhost is used to configure the loopback interface
# when the system is booting. Do not change this entry.
##
127.0.0.1 localhost
127.0.0.1 mydomain.com
255.255.255.255 broadcasthost
::1 localhost

Error 404 on localhost with wampserver

I've been using wamp for 2 weeks at my work without any problem, but now I've some issues :
localhost/phpmyadmin is working well, but
localhost/ and 127.0.0.1 gives me a 404 error :
Not Found The requested URL / was not found on this server.
I already tested the port 80 and it's used by Apache.
I have virtual hosts that works well but I can't create a new one anymore, it won't work, I don't know why.
I've searched a lot on internet but all I can find is solution that just does not work for me so if you could help me, that would be fantastic.
EDIT : I just changed my httpd-vhosts.conf, I had a mistake in my new vhosts, so now they work well, but I still have an error 404 on localhost/.
EDIT : Thank you RiggsFolly for the help, I needed to had localhost in my httpd-vhosts.conf
Ok, this sounds like the browser is trying to use the IPV6 network but you have not entered the IPV6 loopback address into the hosts file
Amend your hosts file to be
127.0.0.1 localhost
127.0.0.1 other.dev
127.0.0.1 other2.dev
::1 localhost
::1 other.dev
::1 other2.dev
The ::1 is the IPV6 loopback address just as 127.0.0.1 is the IPV4 loopback address.
You say you have Virtual Hosts setup, did you also define one, the first one for localhost. Once a Virtual Host is defined the default in httpd.conf for localhost is ignored.
So add this to the top of httpd-vhosts.conf
<VirtualHost *:80>
ServerName localhost
DocumentRoot c:/wamp/www
<Directory "c:/wamp/www/">
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Require local
</Directory>
</VirtualHost>
Change c: to whatever drive you installed WAMPServer onto.

Categories