Apache tricks on Linux

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 RewriteRule and 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:

  ServerName mac2.aimee
  DocumentRoot /home/aimee/websites/mac2
  CustomLog /var/log/apache2/mac2.log combined
  DirectoryIndex index.php

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).

cd /etc/apache2/sites-enabled
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:       mac2.aimee

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:

  ServerName localhost
  DocumentRoot /home/aimee/websites

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:

whereis apache2

To find your hosts file:

locate hosts

I am not an Apache expert, so if you have any questions, chances are i can’t answer them! Scroogle is your friend! :)


3 comments on “Apache tricks on Linux

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s