Most of my life is spent coding Ruby on Rails, but occasionally i venture into the world of PHP. When i do, i sometimes need to configure Apache because, unlike Rails, it does not happen automagically! To save myself always looking things up on the Internet, here is a little summary of the things i have learnt.
Don’t do this!
When i very first started using Linux, i discovered that you could put files into
/var/www and access them through http://localhost. This is a very bad idea because you don’t have permissions to the
/var directory (for good reason!) so i used to end up
chmodding everything. Also, keeping anything outside your home directory is bad news because you’re liable to forget to back it up before you do an upgrade! WHOOPS!
A perfectly good solution
The next thing i learnt was symlinking, or creating shortcuts. So you can set up a shortcut from the
/var/www directory to an appropriate place in your home directory. For example:
sudo ln -s /home/aimee/websites /var/www/html
Now if i have a directory called
mac2 under my
websites directory i can go to http://localhost/html/mac2/index.php. Nice!
More advanced: VirtualHosts
Later on i started experimenting with Apache’s
RewriteBase for nice ‘pretty’ URLs. You’ll soon find out that the symlink method is no longer suitable because you’re not using relative URLs anymore. It’s time to learn about
VirtualHosts, so that i can access my local files with a URL like http://mac2.aimee.
Apache2 keeps a list of available configurations under
/etc/apache2/sites-available. I have one called
aimee.conf because i am egotistical like that!
sudo vim /etc/apache2/sites-available/aimee.conf
It must start with this line:
Then, for each site that i want, i add a
VirtualHost like this:
CustomLog /var/log/apache2/mac2.log combined
It really just needs to know where to find the source files. The log and directory index are not especially important. It’s probably fairly obvious why i added them. There are plenty of other options you could use if you wanted to, but this is about all i use.
Next we need to enable the configuration. It’s as simple as symlinking the file from the
sites-available directory. You only need to do this once per
.conf file (and i only use one for simplicity).
sudo ln -s /etc/apache2/sites-available/aimee.conf .
The next step is to configure the
hosts file such that when i type http://mac2.aimee into a browser it knows to look on my actual computer rather than on the Internet.
sudo vim /etc/hosts
I enter a line like this:
Finally, restart Apache and all should be very well!
sudo /etc/init.d/apache2 restart
The best of both worlds
If you want it both ways (and hey, why shouldn’t you?!) it is quite simple to set up another VirtualHost for localhost. Just add it in like this:
Restart Apache again and now the same site is accessible at both http://mac2.aimee and http://localhost/mac2/index.php.
Happy day! :)
This is how i made it work on Ubuntu Linux in a development environment. Other operating systems may behave differently. I have no idea about setting up production servers!
If Apache is in a different place on your computer, you can find it like this:
To find your
I am not an Apache expert, so if you have any questions, chances are i can’t answer them! Scroogle is your friend! :)