Directory structure
A Herbie website is usually structured as follows:
project
├── site
├── vendor
└── web
    ├── assets
    ├── cache
    ├── media
    ├── .htaccess
    └── index.phpWhat these files and directories stand for can be seen in the following table:
| File/Directory | Description | 
|---|---|
| project | The project directory on the web server. | 
| site | The actual content of the website (see below). This directory is normally not accessible via the web. However, it can also be placed in the public directory. | 
| vendor | This directory is the Composer vendor and contains all dependent third-party libraries. This directory is not accessible via the web. | 
| web | The public directory of the web server. This can be accessed via the web browser. | 
| web/assets | The repository for JavaScript, CSS and image files, which are needed for the layout of the website. | 
| web/cache | The cache for files that should be publicly accessible, e.g. resized images. | 
| web/media | This directory contains files that are linked through the content. For example, images, PDFs, videos, MP3s, etc. | 
| web/.htaccess | If configuration option `components.urlManager.niceUrls` is enabled, this file must exist with corresponding instructions. | 
| web/index.php | The bootstrap file and part of Herbie. All requests to the web server go through this file. | 
Site directory
Normally one works exclusively in the site directory of the web project.
This is usually structured as follows:
site
├── config
│   └── main.php
├── data
│   ├── animals.json
│   └── persons.yml
├── extend
│   ├── commands
│   ├── events
│   ├── middlewares_app
│   ├── middlewares_route
│   ├── plugins
│   ├── twig_filters
│   ├── twig_functions
│   ├── twig_globals
│   └── twig_tests
├── pages
│   ├── company
│   │   ├── about-us.md
│   │   ├── index.md
│   │   ├── our-vision.md
│   │   └── team.md
│   ├── contact.md
│   ├── index.md
│   └── services.md
├── runtime
│   ├── cache
│   │   ├── system
│   │   └── twig
│   └── log
└── themes
    └─ default
        ├── assets
        ├── default.html
        └── error.htmlThe following table shows what each of these files and directories stand for:
| File/Directory | Description | 
|---|---|
| config | The configuration directory with files in PHP format (the main file can also be a PHP file). | 
| data | The data directory where various data files in JSON or YAML format can be stored. | 
| extend | The directory with various customized extensions. | 
| extend/commands | Directory with customized console commands. | 
| extend/events | Directory with customized event listeners. | 
| extend/middlewares_app | Directory with customized application middlewares. | 
| extend/middlewares_route | Directory with customized route middlewares. | 
| extend/plugins | Directory with customized Plugins. | 
| extend/twig_filters | Directory with customized Twig Filters. | 
| extend/twig_functions | Directory with customized Twig Functions. | 
| extend/twig_globals | Directory with customized Twig Globals. | 
| extend/twig_tests | Directory with customized Twig Tests. | 
| pages | The CMS pages of the website. These are saved as text files (Markdown, Textile, Text, HTML). | 
| runtime | Directory with temporary files created during the program runtime. | 
| runtime/cache | Directory with cache files. | 
| runtime/cache/system | Directory with cache files for the system. | 
| runtime/cache/twig | Directory with cache files for Twig. | 
| runtime/log | Directory with log files from PHP or a PSR-3 compatible logger. | 
| themes | Directory with theme directories and files. | 
| themes/default | The directory with the default theme. Besides template files it contains CSS and JS files that are copied to the web assets directory at runtime. | 
.htaccess file
If configuration option components.urlManager.niceUrls is enabled, there must be an .htaccess file with appropriate instructions in the web directory.
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.phpThus, all page views are passed on to the central index file. This is important for search engine optimization, for example, but also for visitors to the website.
Note: The above configuration is designed for Apache web server.