<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head>
<meta content="text/html; charset=UTF-8" http-equiv="Content-Type" />
<!--
        XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
              This file is generated from xml source: DO NOT EDIT
        XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
      -->
<title>Terms Used to Describe Directives - Apache HTTP Server Version 2.5</title>
<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" /><link rel="stylesheet" type="text/css" href="../style/css/prettify.css" />
<script src="../style/scripts/prettify.min.js" type="text/javascript">
</script>

<link href="../images/favicon.ico" rel="shortcut icon" /></head>
<body id="manual-page"><div id="page-header">
<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/quickreference.html">Directives</a> | <a href="http://wiki.apache.org/httpd/FAQ">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p>
<p class="apache">Apache HTTP Server Version 2.5</p>
<img alt="" src="../images/feather.png" /></div>
<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
<div id="path">
<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs/">Documentation</a> &gt; <a href="../">Version 2.5</a></div><div id="page-content"><div id="preamble"><h1>Terms Used to Describe Directives</h1>
<div class="toplang">
<p><span>Available Languages: </span><a href="../en/mod/directive-dict.html" title="English">&nbsp;en&nbsp;</a> |
<a href="../es/mod/directive-dict.html" hreflang="es" rel="alternate" title="Español">&nbsp;es&nbsp;</a> |
<a href="../fr/mod/directive-dict.html" hreflang="fr" rel="alternate" title="Français">&nbsp;fr&nbsp;</a> |
<a href="../ja/mod/directive-dict.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
<a href="../ko/mod/directive-dict.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a> |
<a href="../tr/mod/directive-dict.html" hreflang="tr" rel="alternate" title="Türkçe">&nbsp;tr&nbsp;</a></p>
</div>

    <p>This document describes the terms that are used to describe
    each Apache <a href="directives.html">configuration
    directive</a>.</p>
</div>
<div id="quickview"><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#Description">Description</a></li>
<li><img alt="" src="../images/down.gif" /> <a href="#Syntax">Syntax</a></li>
<li><img alt="" src="../images/down.gif" /> <a href="#Default">Default</a></li>
<li><img alt="" src="../images/down.gif" /> <a href="#Context">Context</a></li>
<li><img alt="" src="../images/down.gif" /> <a href="#Override">Override</a></li>
<li><img alt="" src="../images/down.gif" /> <a href="#Status">Status</a></li>
<li><img alt="" src="../images/down.gif" /> <a href="#Module">Module</a></li>
<li><img alt="" src="../images/down.gif" /> <a href="#Compatibility">Compatibility</a></li>
</ul><h3>See also</h3><ul class="seealso"><li><a href="../configuring.html">Configuration files</a></li><li><a href="#comments_section">Comments</a></li></ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="Description" id="Description">Description</a> <a title="Permanent link" href="#Description" class="permalink">&para;</a></h2>

<p>A brief description of the purpose of the directive.</p>
</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="Syntax" id="Syntax">Syntax</a> <a title="Permanent link" href="#Syntax" class="permalink">&para;</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 Perl-compatible <a class="glossarylink" href="../glossary.html#regex" title="see glossary">regular
      expression</a>. 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>

      <dt><em>time-interval</em></dt>

      <dd>A time-interval format especially suited to specifying
      timeout parameters. Supports the following format specifiers:
        <ul>
          <li><em>s</em>: Seconds</li>
          <li><em>h</em>: Hours</li>
          <li><em>ms</em>: Milli-seconds</li>
          <li><em>mi[n]</em>: Minutes</li>
        </ul>
        For example: <code>Timeout 575ms</code>
      </dd>
   </dl>
</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="Default" id="Default">Default</a> <a title="Permanent link" href="#Default" class="permalink">&para;</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>
</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="Context" id="Context">Context</a> <a title="Permanent link" href="#Context" class="permalink">&para;</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>server config</dt>

      <dd>This means that the directive may be used in the server
      configuration files (<em>e.g.</em>, <code>httpd.conf</code>), but
      <strong>not</strong> within any
      <code class="directive"><a href="../mod/core.html#virtualhost">&lt;VirtualHost&gt;</a></code>
      or <code class="directive"><a href="../mod/core.html#directory">&lt;Directory&gt;</a></code>
      containers. It is not allowed in <code>.htaccess</code> files
      at all.</dd>

      <dt>virtual host</dt>

      <dd>This context means that the directive may appear inside
      <code class="directive"><a href="../mod/core.html#virtualhost">&lt;VirtualHost&gt;</a></code>
      containers in the server
      configuration files.</dd>

      <dt>directory</dt>

      <dd>A directive marked as being valid in this context may be
      used inside <code class="directive"><a href="../mod/core.html#directory">&lt;Directory&gt;</a></code>, <code class="directive"><a href="../mod/core.html#location">&lt;Location&gt;</a></code>, <code class="directive"><a href="../mod/core.html#files">&lt;Files&gt;</a></code>, <code class="directive"><a href="../mod/core.html#if">&lt;If&gt;</a></code>, and <code class="directive"><a href="../mod/mod_proxy.html#proxy">&lt;Proxy&gt;</a></code> containers
      in the server configuration files, subject to the restrictions
      outlined in <a href="../sections.html">Configuration
      Sections</a>.</dd>

      <dt>.htaccess</dt>

      <dd>If a directive is valid in this context, it means that it
      can appear inside <em>per</em>-directory
      <code>.htaccess</code> files. It may not be processed, though
      depending upon the <a href="#Override">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
    "<code>server config, .htaccess</code>" can be used in the
    <code>httpd.conf</code> file and in <code>.htaccess</code>
    files, but not within any <code class="directive"><a href="../mod/core.html#directory">&lt;Directory&gt;</a></code> or
    <code class="directive"><a href="../mod/core.html#virtualhost">&lt;VirtualHost&gt;</a></code>
    containers.</p>
</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="Override" id="Override">Override</a> <a title="Permanent link" href="#Override" class="permalink">&para;</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 <code>.htaccess</code> file. If
    the directive's <a href="#Context">context</a>
    doesn't permit it to appear in <code>.htaccess</code> files,
    then no context will be listed.</p>

    <p>Overrides are activated by the <code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code> directive, and apply
    to a particular scope (such as a directory) and all
    descendants, unless further modified by other
    <code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code> directives at
    lower levels. The documentation for that directive also lists the
    possible override names available.</p>
</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="Status" id="Status">Status</a> <a title="Permanent link" href="#Status" class="permalink">&para;</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>Core</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>MPM</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>Base</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>Extension</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>Experimental</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>
</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="Module" id="Module">Module</a> <a title="Permanent link" href="#Module" class="permalink">&para;</a></h2>

    <p>This quite simply lists the name of the source module which
    defines the directive.</p>
</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="Compatibility" id="Compatibility">Compatibility</a> <a title="Permanent link" href="#Compatibility" class="permalink">&para;</a></h2>

    <p>If the directive wasn't part of the original Apache version
    2 distribution, the version in which it was introduced should
    be listed here.  In addition, if the directive is available
    only on certain platforms, it will be noted here.</p>
</div></div>
<div class="bottomlang">
<p><span>Available Languages: </span><a href="../en/mod/directive-dict.html" title="English">&nbsp;en&nbsp;</a> |
<a href="../es/mod/directive-dict.html" hreflang="es" rel="alternate" title="Español">&nbsp;es&nbsp;</a> |
<a href="../fr/mod/directive-dict.html" hreflang="fr" rel="alternate" title="Français">&nbsp;fr&nbsp;</a> |
<a href="../ja/mod/directive-dict.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
<a href="../ko/mod/directive-dict.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a> |
<a href="../tr/mod/directive-dict.html" hreflang="tr" rel="alternate" title="Türkçe">&nbsp;tr&nbsp;</a></p>
</div><div class="top"><a href="#page-header"><img src="../images/up.gif" alt="top" /></a></div><div class="section"><h2><a id="comments_section" name="comments_section">Comments</a></h2><div class="warning"><strong>Notice:</strong><br />This is not a Q&amp;A section. Comments placed here should be pointed towards suggestions on improving the documentation or server, and may be removed by our moderators if they are either implemented or considered invalid/off-topic. Questions on how to manage the Apache HTTP Server should be directed at either our IRC channel, #httpd, on Libera.chat, or sent to our <a href="https://httpd.apache.org/lists.html">mailing lists</a>.</div>
<script type="text/javascript"><!--//--><![CDATA[//><!--
var comments_shortname = 'httpd';
var comments_identifier = 'http://httpd.apache.org/docs/trunk/mod/directive-dict.html';
(function(w, d) {
    if (w.location.hostname.toLowerCase() == "httpd.apache.org") {
        d.write('<div id="comments_thread"><\/div>');
        var s = d.createElement('script');
        s.type = 'text/javascript';
        s.async = true;
        s.src = 'https://comments.apache.org/show_comments.lua?site=' + comments_shortname + '&page=' + comments_identifier;
        (d.getElementsByTagName('head')[0] || d.getElementsByTagName('body')[0]).appendChild(s);
    }
    else {
        d.write('<div id="comments_thread">Comments are disabled for this page at the moment.<\/div>');
    }
})(window, document);
//--><!]]></script></div><div id="footer">
<p class="apache">Copyright 2023 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/quickreference.html">Directives</a> | <a href="http://wiki.apache.org/httpd/FAQ">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p></div><script type="text/javascript"><!--//--><![CDATA[//><!--
if (typeof(prettyPrint) !== 'undefined') {
    prettyPrint();
}
//--><!]]></script>
</body></html>