Per-Directory Configuration
It is also possible for modules to
be configured on a per-directory, per-URL, or per-file basis. Again,
each module optionally creates its own per-directory configuration
(the same structure is used for all three cases). This configuration
is made available to modules either directly (during configuration)
or indirectly (once the server is running), through the
request_rec
structure, which is detailed in the
next section.
Note that the module doesn’t care how the configuration has been set up in terms of servers, directories, URLs, or file matches — the core of the server works out the appropriate configuration for the current request before modules are called by merging the appropriate set of configurations.
The method differs from per-server configuration, so here’s an example, taken this time from the standard module, modules/metadata/mod_expires.c:
typedef struct { int active; char *expiresdefault; apr_table_t *expiresbytype; } expires_dir_config;
First we have a per-directory configuration structure:
static void *create_dir_expires_config(apr_pool_t *p, char *dummy) { expires_dir_config *new = (expires_dir_config *) apr_pcalloc(p, sizeof(expires_dir_config)); new->active = ACTIVE_DONTCARE; new->expiresdefault = ""; new->expiresbytype = apr_table_make(p, 4); return (void *) new; }
This is the function that creates it, which will be linked from the
module structure, as usual. Note that the active
member is set to a default that can’t be set by directives ...
Get Apache: The Definitive Guide, 3rd Edition now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.