<?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.4</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/directives.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.4</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.4</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"><a href="https://www.apache.org/foundation/contributing.html" class="badge"><img src="https://www.apache.org/images/SupportApache-small.png" alt="Support Apache!" /></a><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></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></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>
    </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></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></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></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></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></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></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/2.4/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 2022 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/directives.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>