# Directory configuration

The entry Directory encloses a group of directives which will apply only to the named directory and sub-directories of that directory. It allows to define completely diferent behaviors depending on the directories.

This kind of entries accept all the options described in the Behavior configuration chapter: Handler, DocumentRoot, Auth, Allow From and OnlySecure.

A directory entry accepts as many of these configuration entries as you want.

### Paths

Paths of the directory entries are relative to the DocumentRoot of the Virtual Host which contains it. If a new DocumentRoot if defined inside the directory entry, it will become its internal location.

### Examples

#### General DocumentRoot

Lets imagine the virtual server DocumentRoot configuration entry is set to /var/www.

    Directory /tarballs {
        Handler file
    }

The request /tarballs/cherokee-1.0.0.tar.gz refers to /var/www//tarballs/cherokee-1.0.0.tar.gz

#### Customized DocumentRoot

As in the previous examples, lets imagine the general DocumentRoot points to /var/www.

    Directory /tarballs {
        Handler file
        DocumentRoot /mnt/extra/source_tars/
    }

The request /tarballs/cherokee-1.0.0.tar.gz refers to /mnt/extra/source_tars/cherokee-1.0.0.tar.gz

It is very common to use this feature to redefine the path of the /icons and /cgi-bin web directories. A usual configuration is:

    Directory /icons {
        Handler file
        DocumentRoot /usr/share/cherokee/icons
    }

    Directory /cgi-bin {
        Handler cgi
        DocumentRoot /usr/lib/cgi-bin
    }

In this way, it is possible to have some paths accessible from the web, outside the main web directory.

#### Configuration inheritance

Lets imagine the DocumentRoot of the current virtual host is set to /var/www/ directory.

    Directory /download {
         Allow From 127.0.0.1, 192.168.0.0/16
    }

    Directory /download/films {
         DocumentRoot /var/films/
         Handler file
    }

The request /download/films/pulpfiction.avi would be processed in this way:

- Check if the clients is inside the allowed network or the web server host. If not, deny the access.
- Locate the file. The DocumentRoot has been redefined, so instead of refers to /var/www/download/films/pulpfiction.avi it refers to /var/films/pulpfiction.avi
- Send the file (it uses the file handler)

#### Configuration inheritance (II)

This examples shows that the Directory inheritance mechanism doesn't overwrite settings.

    Directory /secrets {
         Allow From 10.0.0.0/8, 127.0.0.1, 192.168.0.0/16
    }

    Directory /secrets/important {
         Allow From 127.0.0.1
    }

The request /secrets/important/file.tar.gz will only success if it is made from localhost. No matters is the connection comes from one of the network ranges described on the /secrets directory.