How to set apache configuration for your web projects? Some settings have to be in the main apache config or in a virtual host
, but for many others you have two good choices; either use an
file, or place the setting in the vhost (virtual host) configuration. Which one you choose depends largely on your project setup, let's look at each in turn:
The .htaccess File
The biggest item in favour of an
.htaccess file is that it belongs in your webroot, and can be checked in to your version control tool as part of your project. Particularly if your project is going to be installed by multiple people on multiple platforms, this can be a very easy way to get development copies of code set up very quickly and for it to be easy for developers to see what should be in their
With version control, you can also send new
.htaccess configuration through by updating your copy of the file - but whether this is a strength or a weakness is up to you to judge! If everyone needs different path settings, for example, and is constantly overwriting your
.htaccess file, that's not a particularly excellent setup! Previously I've distributed a sample
.htaccess file with a different file name, and added
.htaccess itself to the ignore list of the version control tool.
The Virtual Host
Putting settings in the virtual host allows an easy way to configure the environment on a per-server basis, and not to accidentally deploy an incorrect setup. You could still distribute a sample vhost setup for people to use as their basis, exactly as you could for
The biggest reason for using the virtual host, especially on a production server, is that using
.htaccess incurs a performance penalty. When you use
.htaccess, apache looks in the current directory for an
.htaccess file to use. It also searches in the parent directory ... and that parent directory's parent directory ... and so on, up to the root of the file system. Imagine doing that on every request to a system under load!
Which To Choose?
It completely depends. At one end of the system, the open source project that will be set up on a relatively large number of systems by potentially inexperienced people - you'd probably choose
.htaccess. For a large-scale, live platform deployment, use the apache settings themselves (a virtual host for a server which runs multiple sites - apache's own settings for a server which only hosts a single site). Where are you on the scale and which will you choose?