<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <meta name="generator" content="HTML Tidy, see www.w3.org" />

    <title>Definitions of terms used to describe Apache
    directives</title>
  </head>
  <!-- Background white, links blue (unvisited), navy (visited), red (active) -->

  <body bgcolor="#FFFFFF" text="#000000" link="#0000FF"
  vlink="#000080" alink="#FF0000">
    <!--#include virtual="header.html" -->

    <h1 align="CENTER">Terms Used to Describe Apache
    Directives</h1>

    <p>Each Apache configuration directive is described using a
    common format that looks like this:</p>

    <dl>
      <dd><a href="#Syntax" rel="Help"><strong>Syntax:</strong></a>
      <em>directive-name</em> <em>some args</em><br />
       <a href="#Default" rel="Help"><strong>Default:</strong></a>
      <samp><em>directive-name default-value</em></samp><br />
       <a href="#Context" rel="Help"><strong>Context:</strong></a>
      <em>context-list</em><br />
       <a href="#Override"
      rel="Help"><strong>Override:</strong></a>
      <em>override</em><br />
       <a href="#Status" rel="Help"><strong>Status:</strong></a>
      <em>status</em><br />
       <a href="#Module" rel="Help"><strong>Module:</strong></a>
      <em>module-name</em><br />
       <a href="#Compatibility"
      rel="Help"><strong>Compatibility:</strong></a>
      <em>compatibility notes</em><br />
       <a href="#Deprecated"
      rel="Help"><strong>Deprecated:</strong></a> <em>see
      other</em></dd>
    </dl>

    <p>Each of the directive's attributes, complete with possible
    values where possible, are described in this document.</p>

    <h2>Directive Terms</h2>

    <ul>
      <li><a href="#Syntax">Syntax</a></li>

      <li><a href="#Default">Default</a></li>

      <li><a href="#Context">Context</a></li>

      <li><a href="#Override">Override</a></li>

      <li><a href="#Status">Status</a></li>

      <li><a href="#Module">Module</a></li>

      <li><a href="#Compatibility">Compatibility</a></li>

      <li><a href="#Deprecated">Deprecated</a></li>
    </ul>
    <hr />

    <h2><a id="Syntax" name="Syntax">Syntax</a></h2>

    <p>This indicates the format of the directive as it would
    appear in a configuration file. This syntax is extremely
    directive-specific, and is described in detail in the
    directive's definition. Generally, the directive name is
    followed by a series of one or more space-separated arguments.
    If an argument contains a space, the argument must be enclosed
    in double quotes. Optional arguments are enclosed in square
    brackets. Where an argument can take on more than one possible
    value, the possible values are separated by vertical bars "|".
    Literal text is presented in the default font, while
    argument-types for which substitution is necessary are
    <em>emphasized</em>. Directives which can take a variable
    number of arguments will end in "..." indicating that the last
    argument is repeated.</p>

    <p>Directives use a great number of different argument types. A
    few common ones are defined below.</p>

    <dl>
      <dt><em>URL</em></dt>

      <dd>A complete Uniform Resource Locator including a scheme,
      hostname, and optional pathname as in
      <code>http://www.example.com/path/to/file.html</code></dd>

      <dt><em>URL-path</em></dt>

      <dd>The part of a <em>url</em> which follows the scheme and
      hostname as in <code>/path/to/file.html</code>. The
      <em>url-path</em> represents a web-view of a resource, as
      opposed to a file-system view.</dd>

      <dt><em>file-path</em></dt>

      <dd>The path to a file in the local file-system beginning
      with the root directory as in
      <code>/usr/local/apache/htdocs/path/to/file.html</code>.
      Unless otherwise specified, a <em>file-path</em> which does
      not begin with a slash will be treated as relative to the <a
      href="core.html#serverroot">ServerRoot</a>.</dd>

      <dt><em>directory-path</em></dt>

      <dd>The path to a directory in the local file-system
      beginning with the root directory as in
      <code>/usr/local/apache/htdocs/path/to/</code>.</dd>

      <dt><em>filename</em></dt>

      <dd>The name of a file with no accompanying path information
      as in <code>file.html</code>.</dd>

      <dt><em>regex</em></dt>

      <dd>A regular expression, which is a way of describing a
      pattern to match in text. The directive definition will
      specify what the <em>regex</em> is matching against.</dd>

      <dt><em>extension</em></dt>

      <dd>In general, this is the part of the <em>filename</em>
      which follows the last dot. However, Apache recognizes
      multiple filename extensions, so if a <em>filename</em>
      contains more than one dot, each dot-separated part of the
      filename following the first dot is an <em>extension</em>.
      For example, the <em>filename</em> <code>file.html.en</code>
      contains two extensions: <code>.html</code> and
      <code>.en</code>. For Apache directives, you may specify
      <em>extension</em>s with or without the leading dot. In
      addition, <em>extension</em>s are not case sensitive.</dd>

      <dt><em>MIME-type</em></dt>

      <dd>A method of describing the format of a file which
      consists of a major format type and a minor format type,
      separated by a slash as in <code>text/html</code>.</dd>

      <dt><em>env-variable</em></dt>

      <dd>The name of an <a href="../env.html">environment
      variable</a> defined in the Apache configuration process.
      Note this is not necessarily the same as an operating system
      environment variable. See the <a
      href="../env.html">environment variable documentation</a> for
      more details.</dd>
    </dl>
    <hr />

    <h2><a id="Default" name="Default">Default</a></h2>

    <p>If the directive has a default value (<em>i.e.</em>, if you
    omit it from your configuration entirely, the Apache Web server
    will behave as though you set it to a particular value), it is
    described here. If there is no default value, this section
    should say "<em>None</em>". Note that the default listed here
    is not necessarily the same as the value the directive takes in
    the default httpd.conf distributed with the server.</p>
    <hr />

    <h2><a id="Context" name="Context">Context</a></h2>

    <p>This indicates where in the server's configuration files the
    directive is legal. It's a comma-separated list of one or more
    of the following values:</p>

    <dl>
      <dt><strong>server config</strong></dt>

      <dd>This means that the directive may be used in the server
      configuration files (<em>e.g.</em>, <samp>httpd.conf</samp>,
      <samp>srm.conf</samp>, and <samp>access.conf</samp>), but
      <strong>not</strong> within any
      <samp>&lt;VirtualHost&gt;</samp> or &lt;Directory&gt;
      containers. It is not allowed in <samp>.htaccess</samp> files
      at all.</dd>

      <dt><strong>virtual host</strong></dt>

      <dd>This context means that the directive may appear inside
      <samp>&lt;VirtualHost&gt;</samp> containers in the server
      configuration files.</dd>

      <dt><strong>directory</strong></dt>

      <dd>A directive marked as being valid in this context may be
      used inside <samp>&lt;Directory&gt;</samp>,
      <samp>&lt;Location&gt;</samp>, and <samp>&lt;Files&gt;</samp>
      containers in the server configuration files, subject to the
      restrictions outlined in <a href="../sections.html">How
      Directory, Location and Files sections work</a>.</dd>

      <dt><strong>.htaccess</strong></dt>

      <dd>If a directive is valid in this context, it means that it
      can appear inside <em>per</em>-directory
      <samp>.htaccess</samp> files. It may not be processed, though
      depending upon the <a href="#Override"
      rel="Help">overrides</a> currently active.</dd>
    </dl>

    <p>The directive is <em>only</em> allowed within the designated
    context; if you try to use it elsewhere, you'll get a
    configuration error that will either prevent the server from
    handling requests in that context correctly, or will keep the
    server from operating at all -- <em>i.e.</em>, the server won't
    even start.</p>

    <p>The valid locations for the directive are actually the
    result of a Boolean OR of all of the listed contexts. In other
    words, a directive that is marked as being valid in
    "<samp>server config, .htaccess</samp>" can be used in the
    <samp>httpd.conf</samp> file and in <samp>.htaccess</samp>
    files, but not within any &lt;Directory&gt; or
    &lt;VirtualHost&gt; containers.</p>
    <hr />

    <h2><a id="Override" name="Override">Override</a></h2>

    <p>This directive attribute indicates which configuration
    override must be active in order for the directive to be
    processed when it appears in a <samp>.htaccess</samp> file. If
    the directive's <a href="#Context" rel="Help">context</a>
    doesn't permit it to appear in <samp>.htaccess</samp> files,
    this attribute should say "<em>Not applicable</em>".</p>

    <p>Overrides are activated by the <a
    href="core.html#allowoverride"
    rel="Help"><samp>AllowOverride</samp></a> directive, and apply
    to a particular scope (such as a directory) and all
    descendants, unless further modified by other
    <samp>AllowOverride</samp> directives at lower levels. The
    documentation for that directive also lists the possible
    override names available.</p>
    <hr />

    <h2><a id="Status" name="Status">Status</a></h2>

    <p>This indicates how tightly bound into the Apache Web server
    the directive is; in other words, you may need to recompile the
    server with an enhanced set of modules in order to gain access
    to the directive and its functionality. Possible values for
    this attribute are:</p>

    <dl>
      <dt><strong>Core</strong></dt>

      <dd>If a directive is listed as having "Core" status, that
      means it is part of the innermost portions of the Apache Web
      server, and is always available.</dd>

      <dt><strong>MPM</strong></dt>

      <dd>A directive labeled as having "MPM" status is provided by
      a <a href="../mpm.html">Multi-Processing Module</a>. This
      type of directive will be available if and only if you are
      using one of the MPMs listed on the <a
      href="#Module">Module</a> line of the directive
      definition.</dd>

      <dt><strong>Base</strong></dt>

      <dd>A directive labeled as having "Base" status is supported
      by one of the standard Apache modules which is compiled into
      the server by default, and is therefore normally available
      unless you've taken steps to remove the module from your
      configuration.</dd>

      <dt><strong>Extension</strong></dt>

      <dd>A directive with "Extension" status is provided by one of
      the modules included with the Apache server kit, but the
      module isn't normally compiled into the server. To enable the
      directive and its functionality, you will need to change the
      server build configuration files and re-compile Apache.</dd>

      <dt><strong>Experimental</strong></dt>

      <dd>"Experimental" status indicates that the directive is
      available as part of the Apache kit, but you're on your own
      if you try to use it. The directive is being documented for
      completeness, and is not necessarily supported. The module
      which provides the directive may or may not be compiled in by
      default; check the top of the page which describes the
      directive and its module to see if it remarks on the
      availability.</dd>
    </dl>
    <hr />

    <h2><a id="Module" name="Module">Module</a></h2>

    <p>This quite simply lists the name of the source module which
    defines the directive.</p>
    <hr />

    <h2><a id="Compatibility"
    name="Compatibility">Compatibility</a></h2>

    <p>If the directive wasn't part of the original Apache version
    1 distribution, the version in which it was introduced should
    be listed here. If the directive has the same name as one from
    the NCSA HTTPd server, any inconsistencies in behavior between
    the two should also be mentioned. Otherwise, this attribute
    should say "<em>No compatibility issues.</em>"</p>
    <hr />

    <h2><a id="Deprecated" name="Deprecated">Deprecated</a></h2>

    <p>If this directive is eliminated since the Apache version 1
    distribution, the directive or option that replaces the
    behavior should be cited here. In general, directives,
    features, and options are only deprecated to minimize debugging
    of conflicting features, or if the feature can only continue to
    be supported in an alternate manner.</p>
    <!--#include virtual="footer.html" -->
  </body>
</html>

