<?xml version="1.0"?>
<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
<?xml-stylesheet type="text/xsl" href="../style/manual.en.xsl"?>
<!-- $LastChangedRevision$ -->

<!--
 Licensed to the Apache Software Foundation (ASF) under one or more
 contributor license agreements.  See the NOTICE file distributed with
 this work for additional information regarding copyright ownership.
 The ASF licenses this file to You under the Apache License, Version 2.0
 (the "License"); you may not use this file except in compliance with
 the License.  You may obtain a copy of the License at

     http://www.apache.org/licenses/LICENSE-2.0

 Unless required by applicable law or agreed to in writing, software
 distributed under the License is distributed on an "AS IS" BASIS,
 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 See the License for the specific language governing permissions and
 limitations under the License.
-->

<modulesynopsis metafile="core.xml.meta">

<name>core</name>
<description>Core Apache HTTP Server features that are always
available</description>
<status>Core</status>

<directivesynopsis>
<name>AcceptFilter</name>
<description>Configures optimizations for a Protocol's Listener Sockets</description>
<syntax>AcceptFilter <var>protocol</var> <var>accept_filter</var></syntax>
<contextlist><context>server config</context></contextlist>

<usage>
    <p>This directive enables operating system specific optimizations for a
       listening socket by the <directive>Protocol</directive> type.
       The basic premise is for the kernel to not send a socket to the server
       process until either data is received or an entire HTTP Request is buffered.
       Only <a href="http://www.freebsd.org/cgi/man.cgi?query=accept_filter&amp;sektion=9">
       FreeBSD's Accept Filters</a>, Linux's more primitive
       <code>TCP_DEFER_ACCEPT</code>, and Windows' optimized AcceptEx()
       are currently supported.</p>

    <p>Using <code>none</code> for an argument will disable any accept filters
       for that protocol.  This is useful for protocols that require a server
       send data first, such as <code>ftp:</code> or <code>nntp</code>:</p>
    <highlight language="config">
AcceptFilter nntp none
    </highlight>

    <p>The default protocol names are <code>https</code> for port 443
       and <code>http</code> for all other ports.  To specify that another
       protocol is being used with a listening port, add the <var>protocol</var>
       argument to the <directive module="mpm_common">Listen</directive>
       directive.</p>

    <p>The default values on FreeBSD are:</p>
    <highlight language="config">
AcceptFilter http httpready
AcceptFilter https dataready
    </highlight>

    <p>The <code>httpready</code> accept filter buffers entire HTTP requests at
       the kernel level.  Once an entire request is received, the kernel then
       sends it to the server. See the
       <a href="http://www.freebsd.org/cgi/man.cgi?query=accf_http&amp;sektion=9">
       accf_http(9)</a> man page for more details.  Since HTTPS requests are
       encrypted, only the <a href="http://www.freebsd.org/cgi/man.cgi?query=accf_data&amp;sektion=9">
       accf_data(9)</a> filter is used.</p>

    <p>The default values on Linux are:</p>
    <highlight language="config">
AcceptFilter http data
AcceptFilter https data
    </highlight>

    <p>Linux's <code>TCP_DEFER_ACCEPT</code> does not support buffering http
       requests.  Any value besides <code>none</code> will enable
       <code>TCP_DEFER_ACCEPT</code> on that listener. For more details
       see the Linux
       <a href="http://man7.org/linux/man-pages/man7/tcp.7.html">
       tcp(7)</a> man page.</p>

    <p>The default values on Windows are:</p>
    <highlight language="config">
AcceptFilter http connect
AcceptFilter https connect
    </highlight>

    <p>Window's mpm_winnt interprets the AcceptFilter to toggle the AcceptEx()
       API, and does not support http protocol buffering. <code>connect</code>
       will use the AcceptEx() API, also retrieve the network endpoint
       addresses, but like <code>none</code> the <code>connect</code> option
       does not wait for the initial data transmission.</p>

    <p>On Windows, <code>none</code> uses accept() rather than AcceptEx()
       and will not recycle sockets between connections.  This is useful for
       network adapters with broken driver support, as well as some virtual
       network providers such as vpn drivers, or spam, virus or spyware
       filters.</p>

    <note type="warning">
      <title>The <code>data</code> AcceptFilter (Windows)</title>

      <p>For versions 2.4.23 and prior, the Windows <code>data</code> accept
         filter waited until data had been transmitted and the initial data
         buffer and network endpoint addresses had been retrieved from the
         single AcceptEx() invocation. This implementation was subject to a
         denial of service attack and has been disabled.</p>

      <p>Current releases of httpd default to the <code>connect</code> filter
         on Windows, and will fall back to <code>connect</code> if
         <code>data</code> is specified. Users of prior releases are encouraged
         to add an explicit setting of <code>connect</code> for their
         AcceptFilter, as shown above.</p>
    </note>

</usage>
<seealso><directive module="core">Protocol</directive></seealso>
</directivesynopsis>

<directivesynopsis>
<name>AcceptPathInfo</name>
<description>Resources accept trailing pathname information</description>
<syntax>AcceptPathInfo On|Off|Default</syntax>
<default>AcceptPathInfo Default</default>
<contextlist><context>server config</context>
<context>virtual host</context><context>directory</context>
<context>.htaccess</context></contextlist>
<override>FileInfo</override>

<usage>

    <p>This directive controls whether requests that contain trailing
    pathname information that follows an actual filename (or
    non-existent file in an existing directory) will be accepted or
    rejected.  The trailing pathname information can be made
    available to scripts in the <code>PATH_INFO</code> environment
    variable.</p>

    <p>For example, assume the location <code>/test/</code> points to
    a directory that contains only the single file
    <code>here.html</code>.  Then requests for
    <code>/test/here.html/more</code> and
    <code>/test/nothere.html/more</code> both collect
    <code>/more</code> as <code>PATH_INFO</code>.</p>

    <p>The three possible arguments for the
    <directive>AcceptPathInfo</directive> directive are:</p>
    <dl>
    <dt><code>Off</code></dt><dd>A request will only be accepted if it
    maps to a literal path that exists.  Therefore a request with
    trailing pathname information after the true filename such as
    <code>/test/here.html/more</code> in the above example will return
    a 404 NOT FOUND error.</dd>

    <dt><code>On</code></dt><dd>A request will be accepted if a
    leading path component maps to a file that exists.  The above
    example <code>/test/here.html/more</code> will be accepted if
    <code>/test/here.html</code> maps to a valid file.</dd>

    <dt><code>Default</code></dt><dd>The treatment of requests with
    trailing pathname information is determined by the <a
    href="../handler.html">handler</a> responsible for the request.
    The core handler for normal files defaults to rejecting
    <code>PATH_INFO</code> requests. Handlers that serve scripts, such as <a
    href="mod_cgi.html">cgi-script</a> and <a
    href="mod_isapi.html">isapi-handler</a>, generally accept
    <code>PATH_INFO</code> by default.</dd>
    </dl>

    <p>The primary purpose of the <code>AcceptPathInfo</code>
    directive is to allow you to override the handler's choice of
    accepting or rejecting <code>PATH_INFO</code>. This override is required,
    for example, when you use a <a href="../filter.html">filter</a>, such
    as <a href="mod_include.html">INCLUDES</a>, to generate content
    based on <code>PATH_INFO</code>.  The core handler would usually reject
    the request, so you can use the following configuration to enable
    such a script:</p>

    <highlight language="config">
&lt;Files "mypaths.shtml"&gt;
  Options +Includes
  SetOutputFilter INCLUDES
  AcceptPathInfo On
&lt;/Files&gt;
    </highlight>

</usage>
</directivesynopsis>

<directivesynopsis>
<name>AccessFileName</name>
<description>Name of the distributed configuration file</description>
<syntax>AccessFileName <var>filename</var> [<var>filename</var>] ...</syntax>
<default>AccessFileName .htaccess</default>
<contextlist><context>server config</context><context>virtual host</context>
</contextlist>

<usage>
    <p>While processing a request, the server looks for
    the first existing configuration file from this list of names in
    every directory of the path to the document, if distributed
    configuration files are <a href="#allowoverride">enabled for that
    directory</a>. For example:</p>

    <highlight language="config">
AccessFileName .acl
    </highlight>

    <p>Before returning the document
    <code>/usr/local/web/index.html</code>, the server will read
    <code>/.acl</code>, <code>/usr/.acl</code>,
    <code>/usr/local/.acl</code> and <code>/usr/local/web/.acl</code>
    for directives unless they have been disabled with:</p>

    <highlight language="config">
&lt;Directory "/"&gt;
    AllowOverride None
&lt;/Directory&gt;
    </highlight>
</usage>
<seealso><directive module="core">AllowOverride</directive></seealso>
<seealso><a href="../configuring.html">Configuration Files</a></seealso>
<seealso><a href="../howto/htaccess.html">.htaccess Files</a></seealso>
</directivesynopsis>

<directivesynopsis>
<name>AddDefaultCharset</name>
<description>Default charset parameter to be added when a response
content-type is <code>text/plain</code> or <code>text/html</code></description>
<syntax>AddDefaultCharset On|Off|<var>charset</var></syntax>
<default>AddDefaultCharset Off</default>
<contextlist><context>server config</context>
<context>virtual host</context><context>directory</context>
<context>.htaccess</context></contextlist>
<override>FileInfo</override>

<usage>
    <p>This directive specifies a default value for the media type
    charset parameter (the name of a character encoding) to be added
    to a response if and only if the response's content-type is either
    <code>text/plain</code> or <code>text/html</code>.  This should override
    any charset specified in the body of the response via a <code>META</code>
    element, though the exact behavior is often dependent on the user's client
    configuration. A setting of <code>AddDefaultCharset Off</code>
    disables this functionality. <code>AddDefaultCharset On</code> enables
    a default charset of <code>iso-8859-1</code>. Any other value is assumed
    to be the <var>charset</var> to be used, which should be one of the
    <a href="http://www.iana.org/assignments/character-sets">IANA registered
    charset values</a> for use in Internet media types (MIME types).
    For example:</p>

    <highlight language="config">
AddDefaultCharset utf-8
    </highlight>

    <p><directive>AddDefaultCharset</directive> should only be used when all
    of the text resources to which it applies are known to be in that
    character encoding and it is too inconvenient to label their charset
    individually. One such example is to add the charset parameter
    to resources containing generated content, such as legacy CGI
    scripts, that might be vulnerable to cross-site scripting attacks
    due to user-provided data being included in the output.  Note, however,
    that a better solution is to just fix (or delete) those scripts, since
    setting a default charset does not protect users that have enabled
    the "auto-detect character encoding" feature on their browser.</p>
</usage>
<seealso><directive module="mod_mime">AddCharset</directive></seealso>
</directivesynopsis>

<directivesynopsis>
<name>AllowEncodedSlashes</name>
<description>Determines whether encoded path separators in URLs are allowed to
be passed through</description>
<syntax>AllowEncodedSlashes On|Off|NoDecode</syntax>
<default>AllowEncodedSlashes Off</default>
<contextlist><context>server config</context><context>virtual host</context>
</contextlist>
<compatibility>
NoDecode option available in 2.3.12 and later.</compatibility>

<usage>
    <p>The <directive>AllowEncodedSlashes</directive> directive allows URLs
    which contain encoded path separators (<code>%2F</code> for <code>/</code>
    and additionally <code>%5C</code> for <code>\</code> on accordant systems)
    to be used in the path info.</p>

    <p>With the default value, <code>Off</code>, such URLs are refused
    with a 404 (Not found) error.</p>

    <p>With the value <code>On</code>, such URLs are accepted, and encoded
      slashes are decoded like all other encoded characters.</p>

    <p>With the value <code>NoDecode</code>, such URLs are accepted, but
      encoded slashes are not decoded but left in their encoded state.</p>

    <p>Turning <directive>AllowEncodedSlashes</directive> <code>On</code> is
    mostly useful when used in conjunction with <code>PATH_INFO</code>.</p>

    <note><title>Note</title>
      <p>If encoded slashes are needed in path info, use of <code>NoDecode</code> is
      strongly recommended as a security measure.  Allowing slashes
      to be decoded could potentially allow unsafe paths.</p>
    </note>
</usage>
<seealso><directive module="core">AcceptPathInfo</directive></seealso>
</directivesynopsis>

<directivesynopsis>
<name>AllowOverride</name>
<description>Types of directives that are allowed in
<code>.htaccess</code> files</description>
<syntax>AllowOverride All|None|<var>directive-type</var>
[<var>directive-type</var>] ...</syntax>
<default>AllowOverride None (2.3.9 and later), AllowOverride All (2.3.8 and earlier)</default>
<contextlist><context>directory</context></contextlist>

<usage>
    <p>When the server finds an <code>.htaccess</code> file (as
    specified by <directive module="core">AccessFileName</directive>),
    it needs to know which directives declared in that file can override
    earlier configuration directives.</p>

    <note><title>Only available in &lt;Directory&gt; sections</title>
    <directive>AllowOverride</directive> is valid only in
    <directive type="section" module="core">Directory</directive>
    sections specified without regular expressions, not in <directive
    type="section" module="core">Location</directive>, <directive
    module="core" type="section">DirectoryMatch</directive> or
    <directive type="section" module="core">Files</directive> sections.
    </note>

    <p>When this directive is set to <code>None</code> and <directive
    module="core">AllowOverrideList</directive> is set to
    <code>None</code>, <a href="#accessfilename">.htaccess</a> files are
    completely ignored. In this case, the server will not even attempt
    to read <code>.htaccess</code> files in the filesystem.</p>

    <p>When this directive is set to <code>All</code>, then any
    directive which has the .htaccess <a
    href="directive-dict.html#Context">Context</a> is allowed in
    <code>.htaccess</code> files.</p>

    <p>The <var>directive-type</var> can be one of the following
    groupings of directives. (See the <a href="overrides.html">override class
    index</a> for an up-to-date listing of which directives are enabled by each
    <var>directive-type</var>.)</p>

    <dl>
      <dt><a href="overrides.html#override-authconfig">AuthConfig</a></dt>

      <dd>

      Allow use of the authorization directives (<directive
      module="mod_authz_dbm">AuthDBMGroupFile</directive>,
      <directive module="mod_authn_dbm">AuthDBMUserFile</directive>,
      <directive module="mod_authz_groupfile">AuthGroupFile</directive>,
      <directive module="mod_authn_core">AuthName</directive>,
      <directive module="mod_authn_core">AuthType</directive>, <directive
      module="mod_authn_file">AuthUserFile</directive>, <directive
      module="mod_authz_core">Require</directive>, <em>etc.</em>).</dd>

      <dt><a href="overrides.html#override-fileinfo">FileInfo</a></dt>

      <dd>
      Allow use of the directives controlling document types
     (<directive module="core">ErrorDocument</directive>,
      <directive module="core">ForceType</directive>,
      <directive module="mod_negotiation">LanguagePriority</directive>,
      <directive module="core">SetHandler</directive>,
      <directive module="core">SetInputFilter</directive>,
      <directive module="core">SetOutputFilter</directive>, and
      <module>mod_mime</module> Add* and Remove* directives),
      document meta data (<directive
      module="mod_headers">Header</directive>, <directive
      module="mod_headers">RequestHeader</directive>, <directive
      module="mod_setenvif">SetEnvIf</directive>, <directive
      module="mod_setenvif">SetEnvIfNoCase</directive>, <directive
      module="mod_setenvif">BrowserMatch</directive>, <directive
      module="mod_usertrack">CookieExpires</directive>, <directive
      module="mod_usertrack">CookieDomain</directive>, <directive
      module="mod_usertrack">CookieStyle</directive>, <directive
      module="mod_usertrack">CookieTracking</directive>, <directive
      module="mod_usertrack">CookieName</directive>),
      <module>mod_rewrite</module> directives (<directive
      module="mod_rewrite">RewriteEngine</directive>, <directive
      module="mod_rewrite">RewriteOptions</directive>, <directive
      module="mod_rewrite">RewriteBase</directive>, <directive
      module="mod_rewrite">RewriteCond</directive>, <directive
      module="mod_rewrite">RewriteRule</directive>),
      <module>mod_alias</module> directives (<directive
      module="mod_alias">Redirect</directive>, <directive
      module="mod_alias">RedirectTemp</directive>, <directive
      module="mod_alias">RedirectPermanent</directive>, <directive
      module="mod_alias">RedirectMatch</directive>), and
      <directive module="mod_actions">Action</directive> from
      <module>mod_actions</module>.
      </dd>

      <dt><a href="overrides.html#override-indexes">Indexes</a></dt>

      <dd>
      Allow use of the directives controlling directory indexing
      (<directive
      module="mod_autoindex">AddDescription</directive>,
      <directive module="mod_autoindex">AddIcon</directive>, <directive
      module="mod_autoindex">AddIconByEncoding</directive>,
      <directive module="mod_autoindex">AddIconByType</directive>,
      <directive module="mod_autoindex">DefaultIcon</directive>, <directive
      module="mod_dir">DirectoryIndex</directive>, <directive
      module="mod_dir">FallbackResource</directive>, <a href="mod_autoindex.html#indexoptions.fancyindexing"
      ><code>FancyIndexing</code></a>, <directive
      module="mod_autoindex">HeaderName</directive>, <directive
      module="mod_autoindex">IndexIgnore</directive>, <directive
      module="mod_autoindex">IndexOptions</directive>, <directive
      module="mod_autoindex">ReadmeName</directive>,
      <em>etc.</em>).</dd>

      <dt><a href="overrides.html#override-limit">Limit</a></dt>

      <dd>
      Allow use of the directives controlling host access (<directive
      module="mod_access_compat">Allow</directive>, <directive
      module="mod_access_compat">Deny</directive> and <directive
      module="mod_access_compat">Order</directive>).</dd>

<!-- TODO - Update this for 2.4 syntax -->


      <dt>Nonfatal=[Override|Unknown|All]</dt>

      <dd>
      Allow use of AllowOverride option to treat invalid (unrecognized
      or disallowed) directives in
      .htaccess as nonfatal. Instead of causing an Internal Server
      Error, disallowed or unrecognised directives will be ignored
      and a warning logged:
      <ul>
          <li><strong>Nonfatal=Override</strong> treats directives
              forbidden by AllowOverride as nonfatal.</li>
          <li><strong>Nonfatal=Unknown</strong> treats unknown directives
              as nonfatal.  This covers typos and directives implemented
              by a module that's not present.</li>
          <li><strong>Nonfatal=All</strong> treats both the above as nonfatal.</li>
      </ul>
      <p>Note that a syntax error in a valid directive will still cause
      an Internal Server Error.</p>
      <note type="warning"><title>Security</title>
          Nonfatal errors may have security implications for .htaccess users.
          For example, if AllowOverride disallows AuthConfig, users'
          configuration designed to restrict access to a site will be disabled.
      </note>
      </dd>

      <dt><a href="overrides.html#override-options">Options</a>[=<var>Option</var>,...]</dt>

      <dd>
      Allow use of the directives controlling specific directory
      features (<directive module="core">Options</directive> and
      <directive module="mod_include">XBitHack</directive>).
      An equal sign may be given followed by a comma-separated list, without
      spaces, of options that may be set using the <directive
      module="core">Options</directive> command.

      <note><title>Implicit disabling of Options</title>
      <p>Even though the list of options that may be used in .htaccess files
         can be limited with this directive, as long as any <directive
         module="core">Options</directive> directive is allowed any
         other inherited option can be disabled by using the non-relative
         syntax.  In other words, this mechanism cannot force a specific option
         to remain <em>set</em> while allowing any others to be set.
      </p></note>

      <example>
      AllowOverride Options=Indexes,MultiViews
      </example>
      </dd>
    </dl>

    <p>Example:</p>

    <highlight language="config">
AllowOverride AuthConfig Indexes
    </highlight>

    <p>In the example above, all directives that are neither in the group
    <code>AuthConfig</code> nor <code>Indexes</code> cause an internal
    server error.</p>

    <note><p>For security and performance reasons, do not set
    <code>AllowOverride</code> to anything other than <code>None</code>
    in your <code>&lt;Directory "/"&gt;</code> block. Instead, find (or
    create) the <code>&lt;Directory&gt;</code> block that refers to the
    directory where you're actually planning to place a
    <code>.htaccess</code> file.</p>
    </note>
</usage>
<seealso><directive module="core">AccessFileName</directive></seealso>
<seealso><directive module="core">AllowOverrideList</directive></seealso>
<seealso><a href="../configuring.html">Configuration Files</a></seealso>
<seealso><a href="../howto/htaccess.html">.htaccess Files</a></seealso>
<seealso><a href="overrides.html">Override Class Index for .htaccess</a></seealso>
</directivesynopsis>

<directivesynopsis>
<name>AllowOverrideList</name>
<description>Individual directives that are allowed in
<code>.htaccess</code> files</description>
<syntax>AllowOverrideList None|<var>directive</var>
[<var>directive-type</var>] ...</syntax>
<default>AllowOverrideList None</default>
<contextlist><context>directory</context></contextlist>

<usage>
    <p>When the server finds an <code>.htaccess</code> file (as
    specified by <directive module="core">AccessFileName</directive>),
    it needs to know which directives declared in that file can override
    earlier configuration directives.</p>

    <note><title>Only available in &lt;Directory&gt; sections</title>
    <directive>AllowOverrideList</directive> is valid only in
    <directive type="section" module="core">Directory</directive>
    sections specified without regular expressions, not in <directive
    type="section" module="core">Location</directive>, <directive
    module="core" type="section">DirectoryMatch</directive> or
    <directive type="section" module="core">Files</directive> sections.
    </note>

    <p>When this directive is set to <code>None</code> and <directive
    module="core">AllowOverride</directive> is set to <code>None</code>,
    then <a href="#accessfilename">.htaccess</a> files are completely
    ignored.  In this case, the server will not even attempt to read
    <code>.htaccess</code> files in the filesystem.</p>

    <p>Example:</p>

    <highlight language="config">
AllowOverride None
AllowOverrideList Redirect RedirectMatch
    </highlight>

    <p>In the example above, only the <code>Redirect</code> and
    <code>RedirectMatch</code> directives are allowed. All others will
    cause an Internal Server Error.</p>

    <p>Example:</p>

    <highlight language="config">
AllowOverride AuthConfig
AllowOverrideList CookieTracking CookieName
    </highlight>

    <p>In the example above, <directive module="core">AllowOverride</directive> 
    grants permission to the <code>AuthConfig</code>
    directive grouping and <directive>AllowOverrideList</directive> grants
    permission to only two directives from the <code>FileInfo</code> directive
    grouping. All others will cause an Internal Server Error.</p>
</usage>

<seealso><directive module="core">AccessFileName</directive></seealso>
<seealso><directive module="core">AllowOverride</directive></seealso>
<seealso><a href="../configuring.html">Configuration Files</a></seealso>
<seealso><a href="../howto/htaccess.html">.htaccess Files</a></seealso>
</directivesynopsis>

<directivesynopsis>
    <name>AsyncFilter</name>
    <description>Set the minimum filter type eligible for asynchronous handling</description>
    <syntax>AsyncFilter request|connection|network</syntax>
    <default>AsyncFilter request</default>
    <contextlist><context>server config</context><context>virtual host</context></contextlist>
    <compatibility>Only available from Apache 2.5.0 and later.</compatibility>

    <usage>
        <p>This directive controls the minimum filter levels that are eligible
        for asynchronous handling. This may be necessary to support legacy external
        filters that did not handle meta buckets correctly.</p>

        <p>If set to "network", asynchronous handling will be limited to the network
        filter only. If set to "connection", all connection and network filters
        will be eligible for asynchronous handling, including <module>mod_ssl</module>.
        If set to "request", all filters will be eligible for asynchronous handling.</p>
    </usage>
</directivesynopsis>

<directivesynopsis>
<name>CGIMapExtension</name>
<description>Technique for locating the interpreter for CGI
scripts</description>
<syntax>CGIMapExtension <var>cgi-path</var> <var>.extension</var></syntax>
<contextlist><context>directory</context><context>.htaccess</context>
</contextlist>
<override>FileInfo</override>
<compatibility>NetWare only</compatibility>

<usage>
    <p>This directive is used to control how Apache httpd finds the
    interpreter used to run CGI scripts. For example, setting
    <code>CGIMapExtension sys:\foo.nlm .foo</code> will
    cause all CGI script files with a <code>.foo</code> extension to
    be passed to the FOO interpreter.</p>
</usage>
</directivesynopsis>

<directivesynopsis>
<name>CGIPassAuth</name>
<description>Enables passing HTTP authorization headers to scripts as CGI
variables</description>
<syntax>CGIPassAuth On|Off</syntax>
<default>CGIPassAuth Off</default>
<contextlist><context>directory</context><context>.htaccess</context>
</contextlist>
<override>AuthConfig</override>
<compatibility>Available in Apache HTTP Server 2.4.13 and later</compatibility>

<usage>
    <p><directive>CGIPassAuth</directive> allows scripts access to HTTP
    authorization headers such as <code>Authorization</code>, which is
    required for scripts that implement HTTP Basic authentication.
    Normally these HTTP headers are hidden from scripts. This is to disallow
    scripts from seeing user ids and passwords used to access the server when
    HTTP Basic authentication is enabled in the web server.  This directive
    should be used when scripts are allowed to implement HTTP Basic
    authentication.</p>

    <p>This directive can be used instead of the compile-time setting
    <code>SECURITY_HOLE_PASS_AUTHORIZATION</code> which has been available
    in previous versions of Apache HTTP Server.</p>

    <p>The setting is respected by any modules which use
    <code>ap_add_common_vars()</code>, such as <module>mod_cgi</module>,
    <module>mod_cgid</module>, <module>mod_proxy_fcgi</module>,
    <module>mod_proxy_scgi</module>, and so on.  Notably, it affects
    modules which don't handle the request in the usual sense but
    still use this API; examples of this are <module>mod_include</module>
    and <module>mod_ext_filter</module>.  Third-party modules that don't
    use <code>ap_add_common_vars()</code> may choose to respect the setting
    as well.</p>
</usage>
</directivesynopsis>

<directivesynopsis>
<name>CGIVar</name>
<description>Controls how some CGI variables are set</description>
<syntax>CGIVar <var>variable</var> <var>rule</var></syntax>
<contextlist><context>directory</context><context>.htaccess</context>
</contextlist>
<override>FileInfo</override>
<compatibility>Available in Apache HTTP Server 2.4.21 and later</compatibility>

<usage>
  <p>This directive controls how some CGI variables are set.</p>

  <p><strong>REQUEST_URI</strong> rules:</p>
  <dl>
    <dt><code>original-uri</code> (default)</dt>
    <dd>The value is taken from the original request line, and will not
    reflect internal redirects or subrequests which change the requested
    resource.</dd>
    <dt><code>current-uri</code></dt>
    <dd>The value reflects the resource currently being processed,
    which may be different than the original request from the client
    due to internal redirects or subrequests.</dd>
  </dl>
</usage>
</directivesynopsis>

<directivesynopsis>
<name>DefaultRuntimeDir</name>
<description>Base directory for the server run-time files</description>
<syntax>DefaultRuntimeDir <var>directory-path</var></syntax>
<default>DefaultRuntimeDir DEFAULT_REL_RUNTIMEDIR (logs/)</default>
<contextlist><context>server config</context></contextlist>
<compatibility>Available in Apache 2.4.2 and later</compatibility>

<usage>
    <p>The <directive>DefaultRuntimeDir</directive> directive sets the
    directory in which the server will create various run-time files
    (shared memory, locks, etc.). If set as a relative path, the full path
    will be relative to <directive>ServerRoot</directive>.</p>

    <p><strong>Example</strong></p>
   <highlight language="config">
DefaultRuntimeDir scratch/
    </highlight>

    <p>The default location of <directive>DefaultRuntimeDir</directive> may be
    modified by changing the <code>DEFAULT_REL_RUNTIMEDIR</code> #define
    at build time.</p>

   <p>Note: <directive>ServerRoot</directive> should be specified before this
   directive is used. Otherwise, the default value of <directive>ServerRoot</directive>
   would be used to set the base directory.</p>

</usage>
<seealso><a href="../misc/security_tips.html#serverroot">the
    security tips</a> for information on how to properly set
    permissions on the <directive>ServerRoot</directive></seealso>
</directivesynopsis>

<directivesynopsis>
<name>DefaultStateDir</name>
<description>Base directory for the persistent state files</description>
<syntax>DefaultStateDir <var>directory-path</var></syntax>
<default>DefaultStateDir DEFAULT_REL_STATEDIR (state/)</default>
<contextlist><context>server config</context></contextlist>
<compatibility>Available in Apache 2.5.1 and later</compatibility>

<usage>
    <p>The <directive>DefaultStateDir</directive> directive sets the
    directory in which the server will create various persistent state
    files (databases, long-lived caches, etc.). If set as a relative
    path, the full path will be relative to
    <directive module="core">ServerRoot</directive>.</p>

    <p><strong>Example</strong></p>
   <highlight language="config">
DefaultStateDir state/
    </highlight>

    <p>The default location of <directive>DefaultStateDir</directive> may be
    modified by changing the <code>DEFAULT_REL_STATEDIR</code> #define
    at build time.</p>

   <p>Note: <directive module="core">ServerRoot</directive> should be specified before this
   directive is used. Otherwise, the default value of <directive module="core">ServerRoot</directive>
   would be used to set the base directory.</p>

</usage>
<seealso><a href="../misc/security_tips.html#serverroot">the
    security tips</a> for information on how to properly set
    permissions on the <directive module="core">ServerRoot</directive></seealso>
</directivesynopsis>

<directivesynopsis>
<name>DefaultType</name>
<description>This directive has no effect other than to emit warnings
if the value is not <code>none</code>. In prior versions, DefaultType
would specify a default media type to assign to response content for
which no other media type configuration could be found.
</description>
<syntax>DefaultType <var>media-type|none</var></syntax>
<default>DefaultType none</default>
<contextlist><context>server config</context><context>virtual host</context>
<context>directory</context><context>.htaccess</context>
</contextlist>
<override>FileInfo</override>
<compatibility>All choices except <code>none</code> are DISABLED for 2.3.x and later.
</compatibility>

<usage>
    <p>This directive has been disabled.  For backwards compatibility
    of configuration files, it may be specified with the value
    <code>none</code>, meaning no default media type. For example:</p>

    <highlight language="config">
DefaultType None
    </highlight>

    <p><code>DefaultType None</code> is only available in
    httpd-2.2.7 and later.</p>

    <p>Use the mime.types configuration file and the
    <directive module="mod_mime">AddType</directive> to configure media
    type assignments via file extensions, or the
    <directive module="core">ForceType</directive> directive to configure
    the media type for specific resources. Otherwise, the server will
    send the response without a Content-Type header field and the
    recipient may attempt to guess the media type.</p>
</usage>
</directivesynopsis>

<directivesynopsis>
<name>Define</name>
<description>Define a variable</description>
<syntax>Define <var>parameter-name</var> [<var>parameter-value</var>]</syntax>
<contextlist><context>server config</context><context>virtual host</context>
</contextlist>

<usage>
    <p>In its one parameter form, <directive>Define</directive> is
    equivalent to passing the <code>-D</code> argument to
    <program>httpd</program>. It can be used to toggle the use of
    <directive module="core" type="section">IfDefine</directive>
    sections without needing to alter <code>-D</code> arguments in any
    startup scripts.</p>

    <p>In addition to that, if the second parameter is given, a config variable
    is set to this value. The variable can be used in the configuration using
    the <code>${VAR}</code> syntax. The variable is always globally defined
    and not limited to the scope of the surrounding config section.</p>

    <highlight language="config">
&lt;IfDefine TEST&gt;
  Define servername test.example.com
&lt;/IfDefine&gt;
&lt;IfDefine !TEST&gt;
  Define servername www.example.com
  Define SSL
&lt;/IfDefine&gt;

DocumentRoot "/var/www/${servername}/htdocs"
    </highlight>

    <p>Variable names may not contain colon ":" characters, to avoid clashes
    with <directive module="mod_rewrite">RewriteMap</directive>'s syntax.</p>

    <note><title>Virtual Host scope and pitfalls</title>
      <p>While this directive is supported in virtual host context,
         the changes it makes are visible to any later configuration
         directives, beyond any enclosing virtual host.</p>
    </note>
</usage>
<seealso><directive module="core">UnDefine</directive></seealso>
<seealso><directive module="core">IfDefine</directive></seealso>
</directivesynopsis>

<directivesynopsis type="section">
<name>Directory</name>
<description>Enclose a group of directives that apply only to the
named file-system directory, sub-directories, and their contents.</description>
<syntax>&lt;Directory <var>directory-path</var>&gt;
... &lt;/Directory&gt;</syntax>
<contextlist><context>server config</context><context>virtual host</context>
</contextlist>

<usage>
    <p><directive type="section">Directory</directive> and
    <code>&lt;/Directory&gt;</code> are used to enclose a group of
    directives that will apply only to the named directory,
    sub-directories of that directory, and the files within the respective
    directories.  Any directive that is allowed
    in a directory context may be used. <var>Directory-path</var> is
    either the full path to a directory, or a wild-card string using
    Unix shell-style matching. In a wild-card string, <code>?</code> matches
    any single character, and <code>*</code> matches any sequences of
    characters. You may also use <code>[]</code> character ranges. None
    of the wildcards match a `/' character, so <code>&lt;Directory
    "/*/public_html"&gt;</code> will not match
    <code>/home/user/public_html</code>, but <code>&lt;Directory
    "/home/*/public_html"&gt;</code> will match. Example:</p>

    <highlight language="config">
&lt;Directory "/usr/local/httpd/htdocs"&gt;
  Options Indexes FollowSymLinks
&lt;/Directory&gt;
    </highlight>

    <p>Directory paths <em>may</em> be quoted, if you like, however, it
    <em>must</em> be quoted if the path contains spaces. This is because a
    space would otherwise indicate the end of an argument.</p>

    <note>
      <p>Be careful with the <var>directory-path</var> arguments:
      They have to literally match the filesystem path which Apache httpd uses
      to access the files. Directives applied to a particular
      <code>&lt;Directory&gt;</code> will not apply to files accessed from
      that same directory via a different path, such as via different symbolic
      links.</p>
    </note>

    <p><glossary ref="regex">Regular
    expressions</glossary> can also be used, with the addition of the
    <code>~</code> character. For example:</p>

    <highlight language="config">
&lt;Directory ~ "^/www/[0-9]{3}"&gt;

&lt;/Directory&gt;
    </highlight>

    <p>would match directories in <code>/www/</code> that consisted of
    three numbers.</p>

    <p>If multiple (non-regular expression) <directive
    type="section">Directory</directive> sections
    match the directory (or one of its parents) containing a document,
    then the directives are applied in the order of shortest match
    first, interspersed with the directives from the <a
    href="#accessfilename">.htaccess</a> files. For example,
    with</p>

    <highlight language="config">
&lt;Directory "/"&gt;
  AllowOverride None
&lt;/Directory&gt;

&lt;Directory "/home"&gt;
  AllowOverride FileInfo
&lt;/Directory&gt;
    </highlight>

    <p>for access to the document <code>/home/web/dir/doc.html</code>
    the steps are:</p>

    <ul>
      <li>Apply directive <code>AllowOverride None</code>
      (disabling <code>.htaccess</code> files).</li>

      <li>Apply directive <code>AllowOverride FileInfo</code> (for
      directory <code>/home</code>).</li>

      <li>Apply any <code>FileInfo</code> directives in
      <code>/home/.htaccess</code>, <code>/home/web/.htaccess</code> and
      <code>/home/web/dir/.htaccess</code> in that order.</li>
    </ul>

    <p>Regular expressions are not considered until after all of the
    normal sections have been applied. Then all of the regular
    expressions are tested in the order they appeared in the
    configuration file. For example, with</p>

    <highlight language="config">
&lt;Directory ~ "abc$"&gt;
  # ... directives here ...
&lt;/Directory&gt;
    </highlight>

    <p>the regular expression section won't be considered until after
    all normal <directive type="section">Directory</directive>s and
    <code>.htaccess</code> files have been applied. Then the regular
    expression will match on <code>/home/abc/public_html/abc</code> and
    the corresponding <directive type="section">Directory</directive> will
    be applied.</p>

   <p><strong>Note that the default access for
    <code>&lt;Directory "/"&gt;</code> is to permit all access.
    This means that Apache httpd will serve any file mapped from an URL. It is
    recommended that you change this with a block such
    as</strong></p>

    <highlight language="config">
&lt;Directory "/"&gt;
  Require all denied
&lt;/Directory&gt;
    </highlight>

    <p><strong>and then override this for directories you
    <em>want</em> accessible. See the <a
    href="../misc/security_tips.html">Security Tips</a> page for more
    details.</strong></p>

    <p>The directory sections occur in the <code>httpd.conf</code> file.
    <directive type="section">Directory</directive> directives
    cannot nest, and cannot appear in a <directive module="core"
    type="section">Limit</directive> or <directive module="core"
    type="section">LimitExcept</directive> section.</p>
</usage>
<seealso><a href="../sections.html">How &lt;Directory&gt;,
    &lt;Location&gt; and &lt;Files&gt; sections work</a> for an
    explanation of how these different sections are combined when a
    request is received</seealso>
</directivesynopsis>

<directivesynopsis type="section">
<name>DirectoryMatch</name>
<description>Enclose directives that apply to
the contents of file-system directories matching a regular expression.</description>
<syntax>&lt;DirectoryMatch <var>regex</var>&gt;
... &lt;/DirectoryMatch&gt;</syntax>
<contextlist><context>server config</context><context>virtual host</context>
</contextlist>

<usage>
    <p><directive type="section">DirectoryMatch</directive> and
    <code>&lt;/DirectoryMatch&gt;</code> are used to enclose a group
    of directives which will apply only to the named directory (and the files within),
    the same as <directive module="core" type="section">Directory</directive>.
    However, it takes as an argument a
    <glossary ref="regex">regular expression</glossary>.  For example:</p>

    <highlight language="config">
&lt;DirectoryMatch "^/www/(.+/)?[0-9]{3}/"&gt;
    # ...
&lt;/DirectoryMatch&gt;
    </highlight>

    <p>matches directories in <code>/www/</code> (or any subdirectory thereof)
    that consist of three numbers.</p>

   <note><title>Compatibility</title>
      Prior to 2.3.9, this directive implicitly applied to sub-directories
      (like <directive module="core" type="section">Directory</directive>) and
      could not match the end of line symbol ($).  In 2.3.9 and later,
      only directories that match the expression are affected by the enclosed
      directives.
    </note>

    <note><title>Trailing Slash</title>
      This directive applies to requests for directories that may or may
      not end in a trailing slash, so expressions that are anchored to the
      end of line ($) must be written with care.
    </note>

    <p>From 2.4.8 onwards, named groups and backreferences are captured and
    written to the environment with the corresponding name prefixed with
    "MATCH_" and in upper case. This allows elements of paths to be referenced
    from within <a href="../expr.html">expressions</a> and modules like
    <module>mod_rewrite</module>. In order to prevent confusion, numbered
    (unnamed) backreferences are ignored. Use named groups instead.</p>

    <highlight language="config">
&lt;DirectoryMatch "^/var/www/combined/(?&lt;sitename&gt;[^/]+)"&gt;
    Require ldap-group cn=%{env:MATCH_SITENAME},ou=combined,o=Example
&lt;/DirectoryMatch&gt;
    </highlight>
</usage>
<seealso><directive type="section" module="core">Directory</directive> for
a description of how regular expressions are mixed in with normal
<directive type="section">Directory</directive>s</seealso>
<seealso><a
href="../sections.html">How &lt;Directory&gt;, &lt;Location&gt; and
&lt;Files&gt; sections work</a> for an explanation of how these different
sections are combined when a request is received</seealso>
</directivesynopsis>

<directivesynopsis>
<name>DocumentRoot</name>
<description>Directory that forms the main document tree visible
from the web</description>
<syntax>DocumentRoot <var>directory-path</var></syntax>
<default>DocumentRoot "/usr/local/apache/htdocs"</default>
<contextlist><context>server config</context><context>virtual host</context>
</contextlist>

<usage>
    <p>This directive sets the directory from which <program>httpd</program>
    will serve files. Unless matched by a directive like <directive
    module="mod_alias">Alias</directive>, the server appends the
    path from the requested URL to the document root to make the
    path to the document. Example:</p>

    <highlight language="config">
DocumentRoot "/usr/web"
    </highlight>

    <p>then an access to
    <code>http://my.example.com/index.html</code> refers to
    <code>/usr/web/index.html</code>. If the <var>directory-path</var> is
    not absolute then it is assumed to be relative to the <directive
    module="core">ServerRoot</directive>.</p>

    <p>The <directive>DocumentRoot</directive> should be specified without
    a trailing slash.</p>
</usage>
<seealso><a href="../urlmapping.html#documentroot">Mapping URLs to Filesystem
Locations</a></seealso>
</directivesynopsis>

<directivesynopsis type="section">
<name>Else</name>
<description>Contains directives that apply only if the condition of a
previous <directive type="section" module="core">If</directive> or
<directive type="section" module="core">ElseIf</directive> section is not
satisfied by a request at runtime</description>
<syntax>&lt;Else&gt; ... &lt;/Else&gt;</syntax>
<contextlist><context>server config</context><context>virtual host</context>
<context>directory</context><context>.htaccess</context>
</contextlist>
<override>All</override>
<compatibility>Nested conditions are evaluated in 2.4.26 and later</compatibility>

<usage>
    <p>The <directive type="section">Else</directive> applies the enclosed
    directives if and only if the most recent
    <directive type="section">If</directive> or
    <directive type="section">ElseIf</directive> section
    in the same scope has not been applied.
    For example: In </p>

    <highlight language="config">
&lt;If "-z req('Host')"&gt;
  # ...
&lt;/If&gt;
&lt;Else&gt;
  # ...
&lt;/Else&gt;
    </highlight>

    <p> The <directive type="section">If</directive> would match HTTP/1.0
        requests without a <var>Host:</var> header and the
        <directive type="section">Else</directive> would match requests
        with a <var>Host:</var> header.</p>

</usage>
<seealso><directive type="section" module="core">If</directive></seealso>
<seealso><directive type="section" module="core">ElseIf</directive></seealso>
<seealso><a href="../sections.html">How &lt;Directory&gt;, &lt;Location&gt;,
    &lt;Files&gt; sections work</a> for an explanation of how these
    different sections are combined when a request is received.
    <directive type="section">If</directive>,
    <directive type="section">ElseIf</directive>, and
    <directive type="section">Else</directive> are applied last.</seealso>
</directivesynopsis>

<directivesynopsis type="section">
<name>ElseIf</name>
<description>Contains directives that apply only if a condition is satisfied
by a request at runtime while the condition of a previous
<directive type="section" module="core">If</directive> or
<directive type="section">ElseIf</directive> section is not
satisfied</description>
<syntax>&lt;ElseIf <var>expression</var>&gt; ... &lt;/ElseIf&gt;</syntax>
<contextlist><context>server config</context><context>virtual host</context>
<context>directory</context><context>.htaccess</context>
</contextlist>
<override>All</override>
<compatibility>Nested conditions are evaluated in 2.4.26 and later</compatibility>

<usage>
    <p>The <directive type="section">ElseIf</directive> applies the enclosed
    directives if and only if both the given condition evaluates to true and
    the most recent <directive type="section">If</directive> or
    <directive type="section">ElseIf</directive> section in the same scope has
    not been applied.  For example: In </p>

    <highlight language="config">
&lt;If "-R '10.1.0.0/16'"&gt;
  #...
&lt;/If&gt;
&lt;ElseIf "-R '10.0.0.0/8'"&gt;
  #...
&lt;/ElseIf&gt;
&lt;Else&gt;
  #...
&lt;/Else&gt;
    </highlight>

    <p>The <directive type="section">ElseIf</directive> would match if
    the remote address of a request belongs to the subnet 10.0.0.0/8 but
    not to the subnet 10.1.0.0/16.</p>

</usage>
<seealso><a href="../expr.html">Expressions in Apache HTTP Server</a>,
for a complete reference and more examples.</seealso>
<seealso><directive type="section" module="core">If</directive></seealso>
<seealso><directive type="section" module="core">Else</directive></seealso>
<seealso><a href="../sections.html">How &lt;Directory&gt;, &lt;Location&gt;,
    &lt;Files&gt; sections work</a> for an explanation of how these
    different sections are combined when a request is received.
    <directive type="section">If</directive>,
    <directive type="section">ElseIf</directive>, and
    <directive type="section">Else</directive> are applied last.</seealso>
</directivesynopsis>



<directivesynopsis>
<name>EnableMMAP</name>
<description>Use memory-mapping to read files during delivery</description>
<syntax>EnableMMAP On|Off</syntax>
<default>EnableMMAP On</default>
<contextlist><context>server config</context><context>virtual host</context>
<context>directory</context><context>.htaccess</context>
</contextlist>
<override>FileInfo</override>

<usage>
    <p>This directive controls whether the <program>httpd</program> may use
    memory-mapping if it needs to read the contents of a file during
    delivery.  By default, when the handling of a request requires
    access to the data within a file -- for example, when delivering a
    server-parsed file using <module>mod_include</module> -- Apache httpd
    memory-maps the file if the OS supports it.</p>

    <p>This memory-mapping sometimes yields a performance improvement.
    But in some environments, it is better to disable the memory-mapping
    to prevent operational problems:</p>

    <ul>
    <li>On some multiprocessor systems, memory-mapping can reduce the
    performance of the <program>httpd</program>.</li>
    <li>Deleting or truncating a file while <program>httpd</program>
      has it memory-mapped can cause <program>httpd</program> to
      crash with a segmentation fault.
    </li>
    </ul>

    <p>For server configurations that are vulnerable to these problems,
    you should disable memory-mapping of delivered files by specifying:</p>

    <highlight language="config">
EnableMMAP Off
    </highlight>

    <p>For NFS mounted files, this feature may be disabled explicitly for
    the offending files by specifying:</p>

    <highlight language="config">
&lt;Directory "/path-to-nfs-files"&gt;
  EnableMMAP Off
&lt;/Directory&gt;
    </highlight>
</usage>
</directivesynopsis>

<directivesynopsis>
<name>EnableSendfile</name>
<description>Use the kernel sendfile support to deliver files to the client</description>
<syntax>EnableSendfile On|Off</syntax>
<default>EnableSendfile Off</default>
<contextlist><context>server config</context><context>virtual host</context>
<context>directory</context><context>.htaccess</context>
</contextlist>
<override>FileInfo</override>
<compatibility>Default changed to Off in
version 2.3.9.</compatibility>

<usage>
    <p>This directive controls whether <program>httpd</program> may use the
    sendfile support from the kernel to transmit file contents to the client.
    By default, when the handling of a request requires no access
    to the data within a file -- for example, when delivering a
    static file -- Apache httpd uses sendfile to deliver the file contents
    without ever reading the file if the OS supports it.</p>

    <p>This sendfile mechanism avoids separate read and send operations,
    and buffer allocations. But on some platforms or within some
    filesystems, it is better to disable this feature to avoid
    operational problems:</p>

    <ul>
    <li>Some platforms may have broken sendfile support that the build
    system did not detect, especially if the binaries were built on
    another box and moved to such a machine with broken sendfile
    support.</li>
    <li>On Linux the use of sendfile triggers TCP-checksum
    offloading bugs on certain networking cards when using IPv6.</li>
    <li>On Linux on Itanium, <code>sendfile</code> may be unable to handle
    files over 2GB in size.</li>
    <li>With a network-mounted <directive
    module="core">DocumentRoot</directive> (e.g., NFS, SMB, CIFS, FUSE),
    the kernel may be unable to serve the network file through
    its own cache.</li>
    </ul>

    <p>For server configurations that are not vulnerable to these problems,
    you may enable this feature by specifying:</p>

    <highlight language="config">
EnableSendfile On
    </highlight>

    <p>For network mounted files, this feature may be disabled explicitly
    for the offending files by specifying:</p>

    <highlight language="config">
&lt;Directory "/path-to-nfs-files"&gt;
  EnableSendfile Off
&lt;/Directory&gt;
    </highlight>
    <p>Please note that the per-directory and .htaccess configuration
       of <directive>EnableSendfile</directive> is not supported by
       <module>mod_cache_disk</module>.
       Only global definition of <directive>EnableSendfile</directive>
       is taken into account by the module.
    </p>
</usage>
</directivesynopsis>

<directivesynopsis>
<name>HttpProtocolOptions</name>
<description>Modify restrictions on HTTP Request Messages</description>
<syntax>HttpProtocolOptions [Strict|Unsafe] [RegisteredMethods|LenientMethods]
 [Allow0.9|Require1.0]</syntax>
<default>HttpProtocolOptions Strict LenientMethods Allow0.9</default>
<contextlist><context>server config</context>
<context>virtual host</context></contextlist>
<compatibility>2.2.32 or 2.4.24 and later</compatibility>

<usage>
    <p>This directive changes the rules applied to the HTTP Request Line
    (<a href="https://tools.ietf.org/html/rfc7230#section-3.1.1"
      >RFC 7230 &sect;3.1.1</a>) and the HTTP Request Header Fields
    (<a href="https://tools.ietf.org/html/rfc7230#section-3.2"
      >RFC 7230 &sect;3.2</a>), which are now applied by default or using
    the <code>Strict</code> option. Due to legacy modules, applications or
    custom user-agents which must be deprecated the <code>Unsafe</code>
    option has been added to revert to the legacy behaviors.</p>

    <p>These rules are applied prior to request processing,
    so must be configured at the global or default (first) matching
    virtual host section, by IP/port interface (and not by name)
    to be honored.</p>

    <p>The directive accepts three parameters from the following list
       of choices, applying the default to the ones not specified:</p>

    <dl>
    <dt>Strict|Unsafe</dt>
    <dd>
      <p>Prior to the introduction of this directive, the Apache HTTP Server
      request message parsers were tolerant of a number of forms of input
      which did not conform to the protocol.
      <a href="https://tools.ietf.org/html/rfc7230#section-9.4"
        >RFC 7230 &sect;9.4 Request Splitting</a> and
      <a href="https://tools.ietf.org/html/rfc7230#section-9.5"
        >&sect;9.5 Response Smuggling</a> call out only two of the potential
      risks of accepting non-conformant request messages, while
      <a href="https://tools.ietf.org/html/rfc7230#section-3.5"
           >RFC 7230 &sect;3.5</a> "Message Parsing Robustness" identify the
      risks of accepting obscure whitespace and request message formatting. 
      As of the introduction of this directive, all grammar rules of the
      specification are enforced in the default <code>Strict</code> operating
      mode, and the strict whitespace suggested by section 3.5 is enforced
      and cannot be relaxed.</p>

      <note type="warning"><title>Security risks of Unsafe</title>
        <p>Users are strongly cautioned against toggling the <code>Unsafe</code>
        mode of operation, particularly on outward-facing, publicly accessible
        server deployments.  If an interface is required for faulty monitoring
        or other custom service consumers running on an intranet, users should
        toggle the Unsafe option only on a specific virtual host configured
        to service their internal private network.</p>
      </note>

      <example>
        <title>Example of a request leading to HTTP 400 with Strict mode</title>
        # Missing CRLF<br />
        GET / HTTP/1.0\n\n
      </example>
      <note type="warning"><title>Command line tools and CRLF</title>
        <p>Some tools need to be forced to use CRLF, otherwise httpd will return
        a HTTP 400 response like described in the above use case. For example,
        the <strong>OpenSSL s_client needs the -crlf parameter to work
        properly</strong>.</p>
        <p>The <directive module="mod_dumpio">DumpIOInput</directive> directive
        can help while reviewing the HTTP request to identify issues like the
        absence of CRLF.</p>
      </note>
    </dd>
    <dt>RegisteredMethods|LenientMethods</dt>
    <dd>
      <p><a href="https://tools.ietf.org/html/rfc7231#section-4.1"
           >RFC 7231 &sect;4.1</a> "Request Methods" "Overview" requires that
      origin servers shall respond with a HTTP 501 status code when an
      unsupported method is encountered in the request line.
      This already happens when the <code>LenientMethods</code> option is used,
      but administrators may wish to toggle the <code>RegisteredMethods</code>
      option and register any non-standard methods using the
      <directive module="core">RegisterHttpMethod</directive>
      directive, particularly if the <code>Unsafe</code>
      option has been toggled.</p>

      <note type="warning"><title>Forward Proxy compatibility</title>
        <p>The <code>RegisteredMethods</code> option should <strong>not</strong>
        be toggled for forward proxy hosts, as the methods supported by the
        origin servers are unknown to the proxy server.</p>
      </note>

      <example>
        <title>Example of a request leading to HTTP 501 with LenientMethods mode</title>
        # Unknown HTTP method<br />
        WOW / HTTP/1.0\r\n\r\n<br /><br />
        # Lowercase HTTP method<br />
        get / HTTP/1.0\r\n\r\n<br />
      </example>
      </dd>
      <dt>Allow0.9|Require1.0</dt>
      <dd>
      <p><a href="https://tools.ietf.org/html/rfc2616#section-19.6"
           >RFC 2616 &sect;19.6</a> "Compatibility With Previous Versions" had
      encouraged HTTP servers to support legacy HTTP/0.9 requests. RFC 7230
      supersedes this with "The expectation to support HTTP/0.9 requests has
      been removed" and offers additional comments in 
      <a href="https://tools.ietf.org/html/rfc7230#appendix-A"
        >RFC 7230 Appendix A</a>. The <code>Require1.0</code> option allows
      the user to remove support of the default <code>Allow0.9</code> option's
      behavior.</p>

      <example>
        <title>Example of a request leading to HTTP 400 with Require1.0 mode</title>
        # Unsupported HTTP version<br />
        GET /\r\n\r\n
      </example>
    </dd>
    </dl>
    <p>Reviewing the messages logged to the
    <directive module="core">ErrorLog</directive>, configured with
    <directive module="core">LogLevel</directive> <code>debug</code> level,
    can help identify such faulty requests along with their origin.
    Users should pay particular attention to the 400 responses in the access
    log for invalid requests which were unexpectedly rejected.</p>
</usage>
</directivesynopsis>

<directivesynopsis>
<name>Error</name>
<description>Abort configuration parsing with a custom error message</description>
<syntax>Error <var>message</var></syntax>
<contextlist><context>server config</context><context>virtual host</context>
<context>directory</context><context>.htaccess</context>
</contextlist>
<override>All</override>
<compatibility>2.3.9 and later</compatibility>

<usage>
    <p>If an error can be detected within the configuration, this
    directive can be used to generate a custom error message, and halt
    configuration parsing.  The typical use is for reporting required
    modules which are missing from the configuration.</p>

    <highlight language="config">
# Example
# ensure that mod_include is loaded
&lt;IfModule !include_module&gt;
  Error "mod_include is required by mod_foo.  Load it with LoadModule."
&lt;/IfModule&gt;

# ensure that exactly one of SSL,NOSSL is defined
&lt;IfDefine SSL&gt;
&lt;IfDefine NOSSL&gt;
  Error "Both SSL and NOSSL are defined.  Define only one of them."
&lt;/IfDefine&gt;
&lt;/IfDefine&gt;
&lt;IfDefine !SSL&gt;
&lt;IfDefine !NOSSL&gt;
  Error "Either SSL or NOSSL must be defined."
&lt;/IfDefine&gt;
&lt;/IfDefine&gt;
    </highlight>

    <note type="warning"><title>Note</title>
        <p> This directive is evaluated at configuration processing time, 
        not at runtime. As a result, this directive cannot be conditonally
        evaluated by enclosing it in an <directive type="section" module="core"
        >If</directive> section.</p>
    </note>
</usage>
</directivesynopsis>

<directivesynopsis>
<name>ErrorDocument</name>
<description>What the server will return to the client
in case of an error</description>
<syntax>ErrorDocument <var>error-code</var> <var>document</var></syntax>
<contextlist><context>server config</context><context>virtual host</context>
<context>directory</context><context>.htaccess</context>
</contextlist>
<override>FileInfo</override>

<usage>
    <p>In the event of a problem or error, Apache httpd can be configured
    to do one of four things,</p>

    <ol>
      <li>output a simple hardcoded error message</li>

      <li>output a customized message</li>

      <li>internally redirect to a local <var>URL-path</var> to handle the
      problem/error</li>

      <li>redirect to an external <var>URL</var> to handle the
      problem/error</li>
    </ol>

    <p>The first option is the default, while options 2-4 are
    configured using the <directive>ErrorDocument</directive>
    directive, which is followed by the HTTP response code and a URL
    or a message. Apache httpd will sometimes offer additional information
    regarding the problem/error.</p>

    <p>From 2.4.13, <a href="../expr.html">expression syntax</a> can be
    used inside the directive to produce dynamic strings and URLs.</p>

    <p>URLs can begin with a slash (/) for local web-paths (relative
    to the <directive module="core">DocumentRoot</directive>), or be a
    full URL which the client can resolve. Alternatively, a message
    can be provided to be displayed by the browser. Note that deciding
    whether the parameter is an URL, a path or a message is performed
    before any expression is parsed. Examples:</p>

    <highlight language="config">
ErrorDocument 500 http://example.com/cgi-bin/server-error.cgi
ErrorDocument 404 /errors/bad_urls.php
ErrorDocument 401 /subscription_info.html
ErrorDocument 403 "Sorry, can't allow you access today"
ErrorDocument 403 Forbidden!
ErrorDocument 403 /errors/forbidden.py?referrer=%{escape:%{HTTP_REFERER}}
    </highlight>

    <p>Additionally, the special value <code>default</code> can be used
    to specify Apache httpd's simple hardcoded message.  While not required
    under normal circumstances, <code>default</code> will restore
    Apache httpd's simple hardcoded message for configurations that would
    otherwise inherit an existing <directive>ErrorDocument</directive>.</p>

    <highlight language="config">
ErrorDocument 404 /cgi-bin/bad_urls.pl

&lt;Directory "/web/docs"&gt;
  ErrorDocument 404 default
&lt;/Directory&gt;
    </highlight>

    <p>Note that when you specify an <directive>ErrorDocument</directive>
    that points to a remote URL (ie. anything with a method such as
    <code>http</code> in front of it), Apache HTTP Server will send a redirect to the
    client to tell it where to find the document, even if the
    document ends up being on the same server. This has several
    implications, the most important being that the client will not
    receive the original error status code, but instead will
    receive a redirect status code. This in turn can confuse web
    robots and other clients which try to determine if a URL is
    valid using the status code. In addition, if you use a remote
    URL in an <code>ErrorDocument 401</code>, the client will not
    know to prompt the user for a password since it will not
    receive the 401 status code. Therefore, <strong>if you use an
    <code>ErrorDocument 401</code> directive, then it must refer to a local
    document.</strong></p>

    <p>Microsoft Internet Explorer (MSIE) will by default ignore
    server-generated error messages when they are "too small" and substitute
    its own "friendly" error messages. The size threshold varies depending on
    the type of error, but in general, if you make your error document
    greater than 512 bytes, then MSIE will show the server-generated
    error rather than masking it.  More information is available in
    Microsoft Knowledge Base article <a
    href="http://support.microsoft.com/default.aspx?scid=kb;en-us;Q294807"
    >Q294807</a>.</p>

    <p>Although most error messages can be overridden, there are certain
    circumstances where the internal messages are used regardless of the
    setting of <directive module="core">ErrorDocument</directive>.  In
    particular, if a malformed request is detected, normal request processing
    will be immediately halted and the internal error message returned.
    This is necessary to guard against security problems caused by
    bad requests.</p>

    <p>If you are using mod_proxy, you may wish to enable
    <directive module="mod_proxy">ProxyErrorOverride</directive> so that you can provide
    custom error messages on behalf of your Origin servers. If you don't enable ProxyErrorOverride,
    Apache httpd will not generate custom error documents for proxied content.</p>
</usage>

<seealso><a href="../custom-error.html">documentation of
    customizable responses</a></seealso>
</directivesynopsis>

<directivesynopsis>
<name>ErrorLog</name>
<description>Location where the server will log errors</description>
<syntax> ErrorLog <var>file-path</var>|syslog[:[<var>facility</var>][:<var>tag</var>]]</syntax>
<default>ErrorLog logs/error_log (Unix) ErrorLog logs/error.log (Windows and OS/2)</default>
<contextlist><context>server config</context><context>virtual host</context>
</contextlist>

<usage>
    <p>The <directive>ErrorLog</directive> directive sets the name of
    the file to which the server will log any errors it encounters. If
    the <var>file-path</var> is not absolute then it is assumed to be
    relative to the <directive module="core">ServerRoot</directive>.</p>

    <highlight language="config">
ErrorLog "/var/log/httpd/error_log"
    </highlight>

    <p>If the <var>file-path</var>
    begins with a pipe character "<code>|</code>" then it is assumed to be a
    command to spawn to handle the error log.</p>

    <highlight language="config">
ErrorLog "|/usr/local/bin/httpd_errors"
    </highlight>

    <p>See the notes on <a href="../logs.html#piped">piped logs</a> for
    more information.</p>

    <p>Using <code>syslog</code> instead of a filename enables logging
    via syslogd(8) if the system supports it and if <module>mod_syslog</module>
    is loaded. The default is to use syslog facility <code>local7</code>,
    but you can override this by using the <code>syslog:<var>facility</var></code>
    syntax where <var>facility</var> can be one of the names usually documented in
    syslog(1).  The facility is effectively global, and if it is changed
    in individual virtual hosts, the final facility specified affects the
    entire server. Same rules apply for the syslog tag, which by default
    uses the Apache binary name, <code>httpd</code> in most cases. You can
    also override this by using the <code>syslog::<var>tag</var></code>
    syntax.</p>

    <highlight language="config">
ErrorLog syslog:user
ErrorLog syslog:user:httpd.srv1
ErrorLog syslog::httpd.srv2
    </highlight>

    <p>Additional modules can provide their own ErrorLog providers. The syntax
    is similar to the <code>syslog</code> example above.</p>

    <p>SECURITY: See the <a
    href="../misc/security_tips.html#serverroot">security tips</a>
    document for details on why your security could be compromised
    if the directory where log files are stored is writable by
    anyone other than the user that starts the server.</p>
    <note type="warning"><title>Note</title>
      <p>When entering a file path on non-Unix platforms, care should be taken
      to make sure that only forward slashes are used even though the platform
      may allow the use of back slashes. In general it is a good idea to always
      use forward slashes throughout the configuration files.</p>
    </note>
</usage>
<seealso><directive module="core">LogLevel</directive></seealso>
<seealso><a href="../logs.html">Apache HTTP Server Log Files</a></seealso>
</directivesynopsis>

<directivesynopsis>
<name>ErrorLogFormat</name>
<description>Format specification for error log entries</description>
<syntax> ErrorLogFormat [connection|request] <var>format</var></syntax>
<contextlist><context>server config</context><context>virtual host</context>
</contextlist>

<usage>
    <p><directive>ErrorLogFormat</directive> allows to specify what
    supplementary information is logged in the error log in addition to the
    actual log message.</p>

    <highlight language="config">
#Simple example
ErrorLogFormat "[%t] [%l] [pid %P] %F: %E: [client %a] %M"
    </highlight>

    <p>Specifying <code>connection</code> or <code>request</code> as first
    parameter allows to specify additional formats, causing additional
    information to be logged when the first message is logged for a specific
    connection or request, respectively. This additional information is only
    logged once per connection/request. If a connection or request is processed
    without causing any log message, the additional information is not logged
    either.</p>

    <p>It can happen that some format string items do not produce output.  For
    example, the Referer header is only present if the log message is
    associated to a request and the log message happens at a time when the
    Referer header has already been read from the client.  If no output is
    produced, the default behavior is to delete everything from the preceding
    space character to the next space character.  This means the log line is
    implicitly divided into fields on non-whitespace to whitespace transitions.
    If a format string item does not produce output, the whole field is
    omitted.  For example, if the remote address <code>%a</code> in the log
    format <code>[%t] [%l] [%a] %M&nbsp;</code> is not available, the surrounding
    brackets are not logged either.  Space characters can be escaped with a
    backslash to prevent them from delimiting a field.  The combination '%&nbsp;'
    (percent space) is a zero-width field delimiter that does not produce any
    output.</p>

    <p>The above behavior can be changed by adding modifiers to the format
    string item. A <code>-</code> (minus) modifier causes a minus to be logged if the
    respective item does not produce any output. In once-per-connection/request
    formats, it is also possible to use the <code>+</code> (plus) modifier. If an
    item with the plus modifier does not produce any output, the whole line is
    omitted.</p>

    <p>A number as modifier can be used to assign a log severity level to a
    format item. The item will only be logged if the severity of the log
    message is not higher than the specified log severity level. The number can
    range from 1 (alert) over 4 (warn) and 7 (debug) to 15 (trace8).</p>

    <p>For example, here's what would happen if you added modifiers to
    the <code>%{Referer}i</code> token, which logs the
    <code>Referer</code> request header.</p>

    <table border="1" style="zebra">
    <columnspec><column width=".3"/><column width=".7"/></columnspec>

    <tr><th>Modified Token</th><th>Meaning</th></tr>

    <tr>
    <td><code>%-{Referer}i</code></td>
    <td>Logs a <code>-</code> if <code>Referer</code> is not set.</td>
    </tr>

    <tr>
    <td><code>%+{Referer}i</code></td>
    <td>Omits the entire line if <code>Referer</code> is not set.</td>
    </tr>

    <tr>
    <td><code>%4{Referer}i</code></td>
    <td>Logs the <code>Referer</code> only if the log message severity
    is higher than 4.</td>
    </tr>

    </table>

    <p>Some format string items accept additional parameters in braces.</p>

    <table border="1" style="zebra">
    <columnspec><column width=".2"/><column width=".8"/></columnspec>

    <tr><th>Format&nbsp;String</th> <th>Description</th></tr>

    <tr><td><code>%%</code></td>
        <td>The percent sign</td></tr>

    <tr><td><code>%a</code></td>
        <td>Client IP address and port of the request</td></tr>

    <tr><td><code>%{c}a</code></td>
        <td>Underlying peer IP address and port of the connection (see the
            <module>mod_remoteip</module> module)</td></tr>

    <tr><td><code>%A</code></td>
        <td>Local IP-address and port</td></tr>

    <tr><td><code>%{<em>name</em>}e</code></td>
        <td>Request environment variable <em>name</em></td></tr>

    <tr><td><code>%E</code></td>
        <td>APR/OS error status code and string</td></tr>

    <tr><td><code>%F</code></td>
        <td>Source file name and line number of the log call</td></tr>

    <tr><td><code>%{<em>name</em>}i</code></td>
        <td>Request header <em>name</em></td></tr>

    <tr><td><code>%k</code></td>
        <td>Number of keep-alive requests on this connection</td></tr>

    <tr><td><code>%l</code></td>
        <td>Loglevel of the message</td></tr>

    <tr><td><code>%L</code></td>
        <td>Log ID of the request</td></tr>

    <tr><td><code>%{c}L</code></td>
        <td>Log ID of the connection</td></tr>

    <tr><td><code>%{C}L</code></td>
        <td>Log ID of the connection if used in connection scope, empty otherwise</td></tr>

    <tr><td><code>%m</code></td>
        <td>Name of the module logging the message</td></tr>

    <tr><td><code>%M</code></td>
        <td>The actual log message</td></tr>

    <tr><td><code>%{<em>name</em>}n</code></td>
        <td>Request note <em>name</em></td></tr>

    <tr><td><code>%P</code></td>
        <td>Process ID of current process</td></tr>

    <tr><td><code>%T</code></td>
        <td>Thread ID of current thread</td></tr>

    <tr><td><code>%{g}T</code></td>
        <td>System unique thread ID of current thread (the same ID as
            displayed by e.g. <code>top</code>; currently Linux only)</td></tr>

    <tr><td><code>%t</code></td>
        <td>The current time</td></tr>

    <tr><td><code>%{u}t</code></td>
        <td>The current time including micro-seconds</td></tr>

    <tr><td><code>%{cu}t</code></td>
        <td>The current time in compact ISO 8601 format, including
            micro-seconds</td></tr>

    <tr><td><code>%v</code></td>
        <td>The canonical <directive module="core">ServerName</directive>
            of the current server.</td></tr>

    <tr><td><code>%V</code></td>
        <td>The server name of the server serving the request according to the
            <directive module="core" >UseCanonicalName</directive>
            setting.</td></tr>

    <tr><td><code>\&nbsp;</code> (backslash space)</td>
        <td>Non-field delimiting space</td></tr>

    <tr><td><code>%&nbsp;</code> (percent space)</td>
        <td>Field delimiter (no output)</td></tr>
    </table>

    <p>The log ID format <code>%L</code> produces a unique id for a connection
    or request. This can be used to correlate which log lines belong to the
    same connection or request, which request happens on which connection.
    A <code>%L</code> format string is also available in
    <module>mod_log_config</module> to allow to correlate access log entries
    with error log lines. If <module>mod_unique_id</module> is loaded, its
    unique id will be used as log ID for requests.</p>

    <highlight language="config">
#Example (default format for threaded MPMs)
ErrorLogFormat "[%{u}t] [%-m:%l] [pid %P:tid %T] %7F: %E: [client\ %a] %M%&nbsp;,\&nbsp;referer\&nbsp;%{Referer}i"
    </highlight>

    <p>This would result in error messages such as:</p>

    <example>
    [Thu May 12 08:28:57.652118 2011] [core:error] [pid 8777:tid 4326490112] [client ::1:58619] File does not exist: /usr/local/apache2/htdocs/favicon.ico
    </example>

    <p>Notice that, as discussed above, some fields are omitted
    entirely because they are not defined.</p>

    <highlight language="config">
#Example (similar to the 2.2.x format)
ErrorLogFormat "[%t] [%l] %7F: %E: [client\ %a] %M%&nbsp;,\&nbsp;referer\&nbsp;%{Referer}i"
    </highlight>

    <highlight language="config">
#Advanced example with request/connection log IDs
ErrorLogFormat "[%{uc}t] [%-m:%-l] [R:%L] [C:%{C}L] %7F: %E: %M"
ErrorLogFormat request "[%{uc}t] [R:%L] Request %k on C:%{c}L pid:%P tid:%T"
ErrorLogFormat request "[%{uc}t] [R:%L] UA:'%+{User-Agent}i'"
ErrorLogFormat request "[%{uc}t] [R:%L] Referer:'%+{Referer}i'"
ErrorLogFormat connection "[%{uc}t] [C:%{c}L] remote\ %a local\ %A"
    </highlight>

</usage>
<seealso><directive module="core">ErrorLog</directive></seealso>
<seealso><directive module="core">LogLevel</directive></seealso>
<seealso><a href="../logs.html">Apache HTTP Server Log Files</a></seealso>
</directivesynopsis>

<directivesynopsis>
<name>ExtendedStatus</name>
<description>Keep track of extended status information for each
request</description>
<syntax>ExtendedStatus On|Off</syntax>
<default>ExtendedStatus Off[*]</default>
<contextlist><context>server config</context></contextlist>

<usage>
    <p>This option tracks additional data per worker about the
    currently executing request and creates a utilization summary.
    You can see these variables during runtime by configuring
    <module>mod_status</module>.  Note that other modules may
    rely on this scoreboard.</p>

    <p>This setting applies to the entire server and cannot be
    enabled or disabled on a virtualhost-by-virtualhost basis.
    The collection of extended status information can slow down
    the server.  Also note that this setting cannot be changed
    during a graceful restart.</p>

    <note>
    <p>Note that loading <module>mod_status</module> will change
    the default behavior to ExtendedStatus On, while other
    third party modules may do the same.  Such modules rely on
    collecting detailed information about the state of all workers.
    The default is changed by <module>mod_status</module> beginning
    with version 2.3.6. The previous default was always Off.</p>
    </note>

</usage>

</directivesynopsis>

<directivesynopsis>
<name>FileETag</name>
<description>File attributes used to create the ETag
HTTP response header for static files</description>
<syntax>FileETag <var>component</var> ...</syntax>
<default>FileETag MTime Size</default>
<contextlist><context>server config</context><context>virtual host</context>
<context>directory</context><context>.htaccess</context>
</contextlist>
<override>FileInfo</override>
<compatibility>The default used to be "INode&nbsp;MTime&nbsp;Size" in 2.3.14 and
earlier.</compatibility>

<usage>
    <p>
    The <directive>FileETag</directive> directive configures the file
    attributes that are used to create the <code>ETag</code> (entity
    tag) response header field when the document is based on a static file.
    (The <code>ETag</code> value is used in cache management to save
    network bandwidth.) The
    <directive>FileETag</directive> directive allows you to choose
    which of these -- if any -- should be used. The recognized keywords are:
    </p>

    <dl>
     <dt><strong>INode</strong></dt>
     <dd>The file's i-node number will be included in the calculation</dd>
     <dt><strong>MTime</strong></dt>
     <dd>The date and time the file was last modified will be included</dd>
     <dt><strong>Size</strong></dt>
     <dd>The number of bytes in the file will be included</dd>
     <dt><strong>All</strong></dt>
     <dd>All available fields will be used. This is equivalent to:
         <highlight language="config">
FileETag INode MTime Size
         </highlight></dd>
     <dt><strong>Digest</strong></dt>
     <dd>If a document is file-based, the <code>ETag</code> field will be
       calculated by taking the digest over the file.</dd>
     <dt><strong>None</strong></dt>
     <dd>If a document is file-based, no <code>ETag</code> field will be
       included in the response</dd>
    </dl>

    <p>The <code>INode</code>, <code>MTime</code>, <code>Size</code> and
    <code>Digest</code> keywords may be prefixed with either <code>+</code>
    or <code>-</code>, which allow changes to be made to the default setting
    inherited from a broader scope. Any keyword appearing without such a prefix
    immediately and completely cancels the inherited setting.</p>

    <p>If a directory's configuration includes
    <code>FileETag&nbsp;INode&nbsp;MTime&nbsp;Size</code>, and a
    subdirectory's includes <code>FileETag&nbsp;-INode</code>,
    the setting for that subdirectory (which will be inherited by
    any sub-subdirectories that don't override it) will be equivalent to
    <code>FileETag&nbsp;MTime&nbsp;Size</code>.</p>
    <note><title>Server Side Includes</title>
    An ETag is not generated for responses parsed by <module>mod_include</module>
    since the response entity can change without a change of the INode, MTime,
    Size or Digest of the static file with embedded SSI directives.
    </note>

</usage>
</directivesynopsis>

<directivesynopsis type="section">
<name>Files</name>
<description>Contains directives that apply to matched
filenames</description>
<syntax>&lt;Files <var>filename</var>&gt; ... &lt;/Files&gt;</syntax>
<contextlist><context>server config</context><context>virtual host</context>
<context>directory</context><context>.htaccess</context>
</contextlist>
<override>All</override>

<usage>
    <p>The <directive type="section">Files</directive> directive
    limits the scope of the enclosed directives by filename. It is comparable
    to the <directive module="core" type="section">Directory</directive>
    and <directive module="core" type="section">Location</directive>
    directives. It should be matched with a <code>&lt;/Files&gt;</code>
    directive. The directives given within this section will be applied to
    any object with a basename (last component of filename) matching the
    specified filename. <directive type="section">Files</directive>
    sections are processed in the order they appear in the
    configuration file, after the <directive module="core"
    type="section">Directory</directive> sections and
    <code>.htaccess</code> files are read, but before <directive
    type="section" module="core">Location</directive> sections. Note
    that <directive type="section">Files</directive> can be nested
    inside <directive type="section"
    module="core">Directory</directive> sections to restrict the
    portion of the filesystem they apply to.</p>

    <p>The <var>filename</var> argument should include a filename, or
    a wild-card string, where <code>?</code> matches any single character,
    and <code>*</code> matches any sequences of characters.</p>
    <highlight language="config">
&lt;Files "cat.html"&gt;
    # Insert stuff that applies to cat.html here
&lt;/Files&gt;

&lt;Files "?at.*"&gt;
    # This would apply to cat.html, bat.html, hat.php and so on.
&lt;/Files&gt;
    </highlight>
    <p><glossary ref="regex">Regular expressions</glossary>
    can also be used, with the addition of the
    <code>~</code> character. For example:</p>

    <highlight language="config">
&lt;Files ~ "\.(gif|jpe?g|png)$"&gt;
    #...
&lt;/Files&gt;
    </highlight>

    <p>would match most common Internet graphics formats. <directive
    module="core" type="section">FilesMatch</directive> is preferred,
    however.</p>

    <p>Note that unlike <directive type="section"
    module="core">Directory</directive> and <directive type="section"
    module="core">Location</directive> sections, <directive
    type="section">Files</directive> sections can be used inside
    <code>.htaccess</code> files. This allows users to control access to
    their own files, at a file-by-file level.</p>

</usage>
<seealso><a href="../sections.html">How &lt;Directory&gt;, &lt;Location&gt;
    and &lt;Files&gt; sections work</a> for an explanation of how these
    different sections are combined when a request is received</seealso>
</directivesynopsis>

<directivesynopsis type="section">
<name>FilesMatch</name>
<description>Contains directives that apply to regular-expression matched
filenames</description>
<syntax>&lt;FilesMatch <var>regex</var>&gt; ... &lt;/FilesMatch&gt;</syntax>
<contextlist><context>server config</context><context>virtual host</context>
<context>directory</context><context>.htaccess</context>
</contextlist>
<override>All</override>

<usage>
    <p>The <directive type="section">FilesMatch</directive> directive
    limits the scope of the enclosed directives by filename, just as the
    <directive module="core" type="section">Files</directive> directive
    does. However, it accepts a <glossary ref="regex">regular
    expression</glossary>. For example:</p>

    <highlight language="config">
&lt;FilesMatch ".+\.(gif|jpe?g|png)$"&gt;
    # ...
&lt;/FilesMatch&gt;
    </highlight>

    <p>would match most common Internet graphics formats.</p>

    <note>The <code>.+</code> at the start of the regex ensures that
    files named <code>.png</code>, or <code>.gif</code>, for example,
    are not matched.</note>

    <p>From 2.4.8 onwards, named groups and backreferences are captured and
    written to the environment with the corresponding name prefixed with
    "MATCH_" and in upper case. This allows elements of files to be referenced
    from within <a href="../expr.html">expressions</a> and modules like
    <module>mod_rewrite</module>. In order to prevent confusion, numbered
    (unnamed) backreferences are ignored. Use named groups instead.</p>

    <highlight language="config">
&lt;FilesMatch "^(?&lt;sitename&gt;[^/]+)"&gt;
    Require ldap-group cn=%{env:MATCH_SITENAME},ou=combined,o=Example
&lt;/FilesMatch&gt;
    </highlight>
</usage>

<seealso><a href="../sections.html">How &lt;Directory&gt;, &lt;Location&gt;
    and &lt;Files&gt; sections work</a> for an explanation of how these
    different sections are combined when a request is received</seealso>
</directivesynopsis>

<directivesynopsis>
<name>FlushMaxPipelined</name>
<description>Maximum number of pipelined responses above which they are flushed
to the network</description>
<syntax>FlushMaxPipelined <var>number</var></syntax>
<default>FlushMaxPipelined 5</default>
<contextlist><context>server config</context><context>virtual host</context>
</contextlist>
<compatibility>2.5 and later</compatibility>

<usage>
    <p>This directive allows to configure the maximum number of pipelined
    responses, which remain pending so long as pipelined request are received.
    When the limit is reached, responses are forcibly flushed to the network in
    blocking mode, until passing under the limit again.</p>

    <p><directive>FlushMaxPipelined</directive> helps constraining memory
    usage. When set to <code>0</code> pipelining is disabled, when set to
    <code>-1</code> there is no limit (<directive module="core">FlushMaxThreshold</directive>
    still applies).</p>
</usage>
</directivesynopsis>

<directivesynopsis>
<name>FlushMaxThreshold</name>
<description>Threshold above which pending data are flushed to the
network</description>
<syntax>FlushMaxThreshold <var>number-of-bytes</var></syntax>
<default>FlushMaxThreshold 65535</default>
<contextlist><context>server config</context><context>virtual host</context>
</contextlist>
<compatibility>2.5 and later</compatibility>

<usage>
    <p>This directive allows to configure the threshold for pending output
    data (in bytes). When the limit is reached, data are forcibly flushed to
    the network in blocking mode, until passing under the limit again.</p>

    <p><directive>FlushMaxThreshold</directive> helps constraining memory
    usage. When set to <code>0</code> or a too small value there are actually
    no pending data, but for threaded MPMs there can be more threads busy
    waiting for the network thus less ones available to handle the other
    simultaneous connections.</p>
</usage>
</directivesynopsis>

<directivesynopsis>
<name>ForceType</name>
<description>Forces all matching files to be served with the specified
media type in the HTTP Content-Type header field</description>
<syntax>ForceType <var>media-type</var>|None</syntax>
<contextlist><context>directory</context><context>.htaccess</context>
</contextlist>
<override>FileInfo</override>

<usage>
    <p>When placed into an <code>.htaccess</code> file or a
    <directive type="section" module="core">Directory</directive>, or
    <directive type="section" module="core">Location</directive> or
    <directive type="section" module="core">Files</directive>
    section, this directive forces all matching files to be served
    with the content type identification given by
    <var>media-type</var>. For example, if you had a directory full of
    GIF files, but did not want to label them all with <code>.gif</code>,
    you might want to use:</p>

    <highlight language="config">
ForceType image/gif
    </highlight>

    <p>Note that this directive overrides other indirect media type
    associations defined in mime.types or via the
    <directive module="mod_mime">AddType</directive>.</p>

    <p>You can also override more general
    <directive>ForceType</directive> settings
    by using the value of <code>None</code>:</p>

    <highlight language="config">
# force all files to be image/gif:
&lt;Location "/images"&gt;
  ForceType image/gif
&lt;/Location&gt;

# but normal mime-type associations here:
&lt;Location "/images/mixed"&gt;
  ForceType None
&lt;/Location&gt;
    </highlight>

    <p>This directive primarily overrides the content types generated for
    static files served out of the filesystem.  For resources other than
    static files, where the generator of the response typically specifies
    a Content-Type, this directive has no effect.</p>


    <note><title>Note</title>
    <p>If no handler is explicitly set for a request, the specified content
    type will also be used as the handler name. </p>
   
    <p>When explicit directives such as
    <directive module="core" >SetHandler</directive> or
    <directive module="mod_mime">AddHandler</directive> do not apply
    to the current request, the internal handler name normally set by those
    directives is instead set to the content type specified by this directive.
    </p>
    <p>
    This is a historical behavior that some third-party modules
    (such as mod_php) may look for a "synthetic" content type used only to 
    signal the module to take responsibility for the matching request. 
    </p>

    <p>Configurations that rely on such "synthetic" types should be avoided.
    Additionally, configurations that restrict access to
    <directive module="core" >SetHandler</directive> or
    <directive module="mod_mime">AddHandler</directive> should
    restrict access to this directive as well.</p>
    </note>

</usage>
</directivesynopsis>
<directivesynopsis>
<name>GprofDir</name>
<description>Directory to write gmon.out profiling data to.  </description>
<syntax>GprofDir <var>/tmp/gprof/</var>|<var>/tmp/gprof/</var>%</syntax>
<contextlist><context>server config</context><context>virtual host</context>
</contextlist>

<usage>
    <p>When the server has been compiled with gprof profiling support,
    <directive>GprofDir</directive> causes <code>gmon.out</code> files to
    be written to the specified directory when the process exits.  If the
    argument ends with a percent symbol ('%'), subdirectories are created
    for each process id.</p>

    <p>This directive currently only works with the <module>prefork</module>
    MPM.</p>
</usage>
</directivesynopsis>

<directivesynopsis>
<name>HostnameLookups</name>
<description>Enables DNS lookups on client IP addresses</description>
<syntax>HostnameLookups On|Off|Double</syntax>
<default>HostnameLookups Off</default>
<contextlist><context>server config</context><context>virtual host</context>
<context>directory</context></contextlist>

<usage>
    <p>This directive enables DNS lookups so that host names can be
    logged (and passed to CGIs/SSIs in <code>REMOTE_HOST</code>).
    The value <code>Double</code> refers to doing double-reverse
    DNS lookup. That is, after a reverse lookup is performed, a forward
    lookup is then performed on that result. At least one of the IP
    addresses in the forward lookup must match the original
    address. (In "tcpwrappers" terminology this is called
    <code>PARANOID</code>.)</p>

    <p>Regardless of the setting, when <module>mod_authz_host</module> is
    used for controlling access by hostname, a double reverse lookup
    will be performed.  This is necessary for security. Note that the
    result of this double-reverse isn't generally available unless you
    set <code>HostnameLookups Double</code>. For example, if only
    <code>HostnameLookups On</code> and a request is made to an object
    that is protected by hostname restrictions, regardless of whether
    the double-reverse fails or not, CGIs will still be passed the
    single-reverse result in <code>REMOTE_HOST</code>.</p>

    <p>The default is <code>Off</code> in order to save the network
    traffic for those sites that don't truly need the reverse
    lookups done. It is also better for the end users because they
    don't have to suffer the extra latency that a lookup entails.
    Heavily loaded sites should leave this directive
    <code>Off</code>, since DNS lookups can take considerable
    amounts of time. The utility <program>logresolve</program>, compiled by
    default to the <code>bin</code> subdirectory of your installation
    directory, can be used to look up host names from logged IP addresses
    offline.</p>

    <p>Finally, if you have <a
    href="mod_authz_host.html#reqhost">hostname-based Require
    directives</a>, a hostname lookup will be performed regardless of
    the setting of <directive>HostnameLookups</directive>.</p>
</usage>
</directivesynopsis>

<directivesynopsis type="section">
<name>If</name>
<description>Contains directives that apply only if a condition is
satisfied by a request at runtime</description>
<syntax>&lt;If <var>expression</var>&gt; ... &lt;/If&gt;</syntax>
<contextlist><context>server config</context><context>virtual host</context>
<context>directory</context><context>.htaccess</context>
</contextlist>
<override>All</override>
<compatibility>Nested conditions are evaluated in 2.4.26 and later</compatibility>

<usage>
    <p>The <directive type="section">If</directive> directive
    evaluates an expression at runtime, and applies the enclosed
    directives if and only if the expression evaluates to true.
    For example:</p>

    <highlight language="config">
&lt;If "-z req('Host')"&gt;
    </highlight>

    <p>would match HTTP/1.0 requests without a <var>Host:</var> header.
    Expressions may contain various shell-like operators for string
    comparison (<code>==</code>, <code>!=</code>, <code>&lt;</code>, ...),
    integer comparison (<code>-eq</code>, <code>-ne</code>, ...),
    and others (<code>-n</code>, <code>-z</code>, <code>-f</code>, ...).
    It is also possible to use regular expressions, </p>

    <highlight language="config">
&lt;If "%{QUERY_STRING} =~ /(delete|commit)=.*?elem/"&gt;
    </highlight>

    <p>shell-like pattern matches and many other operations. These operations
    can be done on request headers (<code>req</code>), environment variables
    (<code>env</code>), and a large number of other properties. The full
    documentation is available in <a href="../expr.html">Expressions in
    Apache HTTP Server</a>.</p>

    <p>Only directives that support the <a href="directive-dict.html#Context"
    >directory context</a> can be used within this configuration section.</p>

    <note type="warning">
    Certain variables, such as <code>CONTENT_TYPE</code> and other
    response headers, are set after &lt;If&gt; conditions have already
    been evaluated, and so will not be available to use in this
    directive.
    </note>
    
    <note type="warning">
    Directives that take affect during configuration parsing, such as 
    <directive>Define</directive>, <directive>Include</directive>, and
    <directive>Error</directive> cannot be made conditional by enclosing
    them in an if <directive type="section">If</directive> configuration
    section.  These sections are always part of the configuration, 
    regardless of how they evaluate at runtime.
    </note>


</usage>

<seealso><a href="../expr.html">Expressions in Apache HTTP Server</a>,
for a complete reference and more examples.</seealso>
<seealso><directive type="section" module="core">ElseIf</directive></seealso>
<seealso><directive type="section" module="core">Else</directive></seealso>
<seealso><a href="../sections.html">How &lt;Directory&gt;, &lt;Location&gt;,
    &lt;Files&gt; sections work</a> for an explanation of how these
    different sections are combined when a request is received.
    <directive type="section">If</directive>,
    <directive type="section">ElseIf</directive>, and
    <directive type="section">Else</directive> are applied last.</seealso>
</directivesynopsis>

<directivesynopsis type="section">
<name>IfDefine</name>
<description>Encloses directives that will be processed only
if a test is true at startup</description>
<syntax>&lt;IfDefine [!]<var>parameter-name</var>&gt; ...
    &lt;/IfDefine&gt;</syntax>
<contextlist><context>server config</context><context>virtual host</context>
<context>directory</context><context>.htaccess</context>
</contextlist>
<override>All</override>

<usage>
    <p>The <code>&lt;IfDefine <var>test</var>&gt;...&lt;/IfDefine&gt;
    </code> section is used to mark directives that are conditional. The
    directives within an <directive type="section">IfDefine</directive>
    section are only processed if the <var>test</var> is true. If <var>
    test</var> is false, everything between the start and end markers is
    ignored.</p>

    <p>The <var>test</var> in the <directive type="section"
    >IfDefine</directive> section directive can be one of two forms:</p>

    <ul>
      <li><var>parameter-name</var></li>

      <li><code>!</code><var>parameter-name</var></li>
    </ul>

    <p>In the former case, the directives between the start and end
    markers are only processed if the parameter named
    <var>parameter-name</var> is defined. The second format reverses
    the test, and only processes the directives if
    <var>parameter-name</var> is <strong>not</strong> defined.</p>

    <p>The <var>parameter-name</var> argument is a define as given on the
    <program>httpd</program> command line via <code>-D<var>parameter</var>
    </code> at the time the server was started or by the <directive
    module="core">Define</directive> directive.</p>

    <p><directive type="section">IfDefine</directive> sections are
    nest-able, which can be used to implement simple
    multiple-parameter tests. Example:</p>

    <example>httpd -DReverseProxy -DUseCache -DMemCache ...</example>
    <highlight language="config">
&lt;IfDefine ReverseProxy&gt;
  LoadModule proxy_module   modules/mod_proxy.so
  LoadModule proxy_http_module   modules/mod_proxy_http.so
  &lt;IfDefine UseCache&gt;
    LoadModule cache_module   modules/mod_cache.so
    &lt;IfDefine MemCache&gt;
      LoadModule mem_cache_module   modules/mod_mem_cache.so
    &lt;/IfDefine&gt;
    &lt;IfDefine !MemCache&gt;
      LoadModule cache_disk_module   modules/mod_cache_disk.so
    &lt;/IfDefine&gt;
  &lt;/IfDefine&gt;
&lt;/IfDefine&gt;
    </highlight>
</usage>
</directivesynopsis>

<directivesynopsis type="section">
<name>IfFile</name>
<description>Encloses directives that will be processed only
if file exists at startup</description>
<syntax>&lt;IfFile [!]<var>parameter-name</var>&gt; ...
    &lt;/IfFile&gt;</syntax>
<contextlist><context>server config</context><context>virtual host</context>
<context>directory</context><context>.htaccess</context>
</contextlist>
<override>All</override>
<compatibility>Available in 2.4.34 and later</compatibility>

<usage>
    <p>The <code>&lt;IfFile <var>filename</var>&gt;...&lt;/IfFile&gt;
    </code> section is used to mark directives that are conditional on
    the existence of a file on disk. The directives within an
    <directive type="section">IfFile</directive> section are only
    processed if <var>filename</var> exists. If <var>filename</var>
    doesn't exist, everything between the start and end markers is
    ignored. <var>filename</var> can be an absolute path or a path
    relative to the server root.</p>

    <p>The <var>filename</var> in the <directive type="section"
    >IfFile</directive> section directive can take the same forms as the
    <var>test</var> variable in the <directive type="section" module="core"
    >IfDefine</directive> section, i.e. the test can be negated if the <code>
    !</code> character is placed directly before <var>filename</var>.
    </p>
   
    <p>If a relative <var>filename</var> is supplied, the check is
    <directive module="core">ServerRoot</directive> relative. In the case where
    this directive occurs before the <directive module="core">ServerRoot</directive>,
    the path will be checked relative to the compiled-in server root or
    the server root passed in on the command line via the <code>-d</code>
    parameter.</p>

    <note type="warning"><title>Warning</title>
    In 2.4.34, it is not possible to specify a <var>filename</var>
    with surrounding quotes. This would generate a parsing error at start-up.
    The main impact is that filenames with spaces can't be used.
    This behavior is fixed in 2.4.35.</note>

</usage>
</directivesynopsis>

<directivesynopsis type="section">
<name>IfModule</name>
<description>Encloses directives that are processed conditional on the
presence or absence of a specific module</description>
<syntax>&lt;IfModule [!]<var>module-file</var>|<var>module-identifier</var>&gt; ...
    &lt;/IfModule&gt;</syntax>
<contextlist><context>server config</context><context>virtual host</context>
<context>directory</context><context>.htaccess</context>
</contextlist>
<override>All</override>

<usage>
    <p>The <code>&lt;IfModule <var>test</var>&gt;...&lt;/IfModule&gt;</code>
    section is used to mark directives that are conditional on the presence of
    a specific module. The directives within an <directive type="section"
    >IfModule</directive> section are only processed if the <var>test</var>
    is true. If <var>test</var> is false, everything between the start and
    end markers is ignored.</p>

    <p>The <var>test</var> in the <directive type="section"
    >IfModule</directive> section directive can be one of two forms:</p>

    <ul>
      <li><var>module</var></li>

      <li>!<var>module</var></li>
    </ul>

    <p>In the former case, the directives between the start and end
    markers are only processed if the module named <var>module</var>
    is included in Apache httpd -- either compiled in or
    dynamically loaded using <directive module="mod_so"
    >LoadModule</directive>. The second format reverses the test,
    and only processes the directives if <var>module</var> is
    <strong>not</strong> included.</p>

    <p>The <var>module</var> argument can be either the module identifier or
    the file name of the module, at the time it was compiled.  For example,
    <code>rewrite_module</code> is the identifier and
    <code>mod_rewrite.c</code> is the file name. If a module consists of
    several source files, use the name of the file containing the string
    <code>STANDARD20_MODULE_STUFF</code>.</p>

    <p><directive type="section">IfModule</directive> sections are
    nest-able, which can be used to implement simple multiple-module
    tests.</p>

    <note>This section should only be used if you need to have one
    configuration file that works whether or not a specific module
    is available. In normal operation, directives need not be
    placed in <directive type="section">IfModule</directive>
    sections.</note>
</usage>
</directivesynopsis>

<directivesynopsis type="section">
<name>IfDirective</name>
<description>Encloses directives that are processed conditional on the
presence or absence of a specific directive</description>
<syntax>&lt;IfDirective [!]<var>directive-name</var>&gt; ...
    &lt;/IfDirective&gt;</syntax>
<contextlist><context>server config</context><context>virtual host</context>
<context>directory</context><context>.htaccess</context>
</contextlist>
<override>All</override>
<compatibility>Available in 2.4.34 and later</compatibility>

<usage>
    <p>The <code>&lt;IfDirective <var>test</var>&gt;...&lt;/IfDirective&gt;</code>
    section is used to mark directives that are conditional on the presence of
    a specific directive. The directives within an <directive type="section"
    >IfDirective</directive> section are only processed if the <var>test</var>
    is true. If <var>test</var> is false, everything between the start and
    end markers is ignored.</p>

    <p>The <var>test</var> in the <directive type="section"
    >IfDirective</directive> section can be one of two forms:</p>

    <ul>
      <li><var>directive-name</var></li>

      <li>!<var>directive-name</var></li>
    </ul>

    <p>In the former case, the directives between the start and end
    markers are only processed if a directive of the given name is
    available at the time of processing.  The second format reverses the test,
    and only processes the directives if <var>directive-name</var> is
    <strong>not</strong> available.</p>

    <note>This section should only be used if you need to have one
    configuration file that works across multiple versions of
    <program>httpd</program>, regardless of whether a particular
    directive is available. In normal operation, directives need not
    be placed in <directive type="section">IfDirective</directive>
    sections.</note>
</usage>
<seealso><directive module="core" type="section">IfSection</directive></seealso>
</directivesynopsis>

<directivesynopsis type="section">
<name>IfSection</name>
<description>Encloses directives that are processed conditional on the
presence or absence of a specific section directive</description>
<syntax>&lt;IfSection [!]<var>section-name</var>&gt; ...
    &lt;/IfSection&gt;</syntax>
<contextlist><context>server config</context><context>virtual host</context>
<context>directory</context><context>.htaccess</context>
</contextlist>
<override>All</override>
<compatibility>Available in 2.4.34 and later</compatibility>

<usage>
    <p>The <code>&lt;IfSection
    <var>test</var>&gt;...&lt;/IfSection&gt;</code> section is used
    to mark directives that are conditional on the presence of a
    specific section directive.  A section directive is any directive
    such as <directive type="section">VirtualHost</directive> which
    encloses other directives, and has a directive name with a leading
    "&lt;".</p>

    <p>The directives within an <directive type="section"
    >IfSection</directive> section are only processed if the <var>test</var>
    is true. If <var>test</var> is false, everything between the start and
    end markers is ignored.</p>

    <p>The <var>section-name</var> must be specified without either
    the leading "&lt;" or closing "&gt;".  The <var>test</var> in the
    <directive type="section">IfSection</directive> section can be one
    of two forms:</p>

    <ul>
      <li><var>section-name</var></li>
      <li>!<var>section-name</var></li>
    </ul>

    <p>In the former case, the directives between the start and end
    markers are only processed if a section directive of the given
    name is available at the time of processing.  The second format
    reverses the test, and only processes the directives if
    <var>section-name</var> is <strong>not</strong> an available
    section directive.</p>

    <p>For example:</p>

    <highlight language="config">
&lt;IfSection VirtualHost&gt;
   ...
&lt;/IfSection&gt;
    </highlight>
    
    <note>This section should only be used if you need to have one
    configuration file that works across multiple versions of <program>httpd</program>,
    regardless of whether a particular section directive is
    available. In normal operation, directives need not be placed in
    <directive type="section">IfSection</directive> sections.</note>
</usage>
<seealso><directive module="core" type="section">IfDirective</directive></seealso>
</directivesynopsis>

<directivesynopsis>
<name>Include</name>
<description>Includes other configuration files from within
the server configuration files</description>
<syntax>Include <var>file-path</var>|<var>directory-path</var>|<var>wildcard</var></syntax>
<contextlist><context>server config</context><context>virtual host</context>
<context>directory</context>
</contextlist>
<compatibility>Directory
wildcard matching available in 2.3.6 and later</compatibility>

<usage>
    <p>This directive allows inclusion of other configuration files
    from within the server configuration files.</p>

    <p>Shell-style (<code>fnmatch()</code>) wildcard characters can be used
    in the filename or directory parts of the path to include several files
    at once, in alphabetical order. In addition, if
    <directive>Include</directive> points to a directory, rather than a file,
    Apache httpd will read all files in that directory and any subdirectory.
    However, including entire directories is not recommended, because it is
    easy to accidentally leave temporary files in a directory that can cause
    <program>httpd</program> to fail. Instead, we encourage you to use the
    wildcard syntax shown below, to include files that match a particular
    pattern, such as *.conf, for example.</p>

    <p>The <directive module="core">Include</directive> directive will
    <strong>fail with an error</strong> if a wildcard expression does not
    match any file. The <directive module="core">IncludeOptional</directive>
    directive can be used if non-matching wildcards should be ignored.</p>

    <p>The file path specified may be an absolute path, or may be relative
    to the <directive module="core">ServerRoot</directive> directory.</p>

    <p>Examples:</p>

    <highlight language="config">
Include /usr/local/apache2/conf/ssl.conf
Include /usr/local/apache2/conf/vhosts/*.conf
    </highlight>

    <p>Or, providing paths relative to your <directive
    module="core">ServerRoot</directive> directory:</p>

    <highlight language="config">
Include conf/ssl.conf
Include conf/vhosts/*.conf
    </highlight>

    <p>Wildcards may be included in the directory or file portion of the
    path. This example will fail if there is no subdirectory in conf/vhosts
    that contains at least one *.conf file:</p>

    <highlight language="config">
Include conf/vhosts/*/*.conf
    </highlight>

    <p>Alternatively, the following command will just be ignored in case of
    missing files or directories:</p>

    <highlight language="config">
IncludeOptional conf/vhosts/*/*.conf
    </highlight>

</usage>

<seealso><directive module="core">IncludeOptional</directive></seealso>
<seealso><program>apachectl</program></seealso>
</directivesynopsis>

<directivesynopsis>
<name>IncludeOptional</name>
<description>Includes other configuration files from within
the server configuration files</description>
<syntax>IncludeOptional <var>file-path</var>|<var>directory-path</var>|<var>wildcard</var></syntax>
<contextlist><context>server config</context><context>virtual host</context>
<context>directory</context>
</contextlist>
<compatibility>Available in 2.3.6 and later. Not existent file paths without wildcards
               do not cause SyntaxError after 2.4.30</compatibility>

<usage>
    <p>This directive allows inclusion of other configuration files
    from within the server configuration files. It works identically to the
    <directive module="core">Include</directive> directive, but it will be
    silently ignored (instead of causing an error) if wildcards are used and
    they do not match any file or directory or if a file path does not exist
    on the file system.</p>
</usage>

<seealso><directive module="core">Include</directive></seealso>
<seealso><program>apachectl</program></seealso>
</directivesynopsis>

<directivesynopsis>
<name>KeepAlive</name>
<description>Enables HTTP persistent connections</description>
<syntax>KeepAlive On|Off</syntax>
<default>KeepAlive On</default>
<contextlist><context>server config</context><context>virtual host</context>
</contextlist>

<usage>
    <p>The Keep-Alive extension to HTTP/1.0 and the persistent
    connection feature of HTTP/1.1 provide long-lived HTTP sessions
    which allow multiple requests to be sent over the same TCP
    connection. In some cases this has been shown to result in an
    almost 50% speedup in latency times for HTML documents with
    many images. To enable Keep-Alive connections, set
    <code>KeepAlive On</code>.</p>

    <p>For HTTP/1.0 clients, Keep-Alive connections will only be
    used if they are specifically requested by a client. In
    addition, a Keep-Alive connection with an HTTP/1.0 client can
    only be used when the length of the content is known in
    advance. This implies that dynamic content such as CGI output,
    SSI pages, and server-generated directory listings will
    generally not use Keep-Alive connections to HTTP/1.0 clients.
    For HTTP/1.1 clients, persistent connections are the default
    unless otherwise specified. If the client requests it, chunked
    encoding will be used in order to send content of unknown
    length over persistent connections.</p>

    <p>When a client uses a Keep-Alive connection, it will be counted
    as a single "request" for the <directive module="mpm_common"
    >MaxConnectionsPerChild</directive> directive, regardless
    of how many requests are sent using the connection.</p>
</usage>

<seealso><directive module="core">MaxKeepAliveRequests</directive></seealso>
</directivesynopsis>

<directivesynopsis>
<name>KeepAliveTimeout</name>
<description>Amount of time the server will wait for subsequent
requests on a persistent connection</description>
<syntax>KeepAliveTimeout <var>num-seconds</var>|<var>num-milliseconds</var>ms</syntax>
<default>KeepAliveTimeout 5</default>
<contextlist><context>server config</context><context>virtual host</context>
</contextlist>

<usage>
    <p>The number of seconds Apache httpd will wait for a subsequent
    request before closing the connection. By adding a postfix of 'ms' the
    timeout can be also set in milliseconds. Once a request has been
    received, the timeout value specified by the
    <directive module="core">Timeout</directive> directive applies.</p>

    <p>Setting <directive>KeepAliveTimeout</directive> to a high value
    may cause performance problems in heavily loaded servers. The
    higher the timeout, the more server processes will be kept
    occupied waiting on connections with idle clients.</p>

    <p>If <directive>KeepAliveTimeout</directive> is <strong>not</strong>
    set for a name-based virtual host, the value of the first defined
    virtual host best matching the local IP and port will be used.</p>
</usage>
</directivesynopsis>

<directivesynopsis type="section">
<name>Limit</name>
<description>Restrict enclosed access controls to only certain HTTP
methods</description>
<syntax>&lt;Limit <var>method</var> [<var>method</var>] ... &gt; ...
    &lt;/Limit&gt;</syntax>
<contextlist><context>directory</context><context>.htaccess</context>
</contextlist>
<override>AuthConfig, Limit</override>

<usage>
    <p>Access controls are normally effective for
    <strong>all</strong> access methods, and this is the usual
    desired behavior. <strong>In the general case, access control
    directives should not be placed within a
    <directive type="section">Limit</directive> section.</strong></p>

    <p>The purpose of the <directive type="section">Limit</directive>
    directive is to restrict the effect of the access controls to the
    nominated HTTP methods. For all other methods, the access
    restrictions that are enclosed in the <directive
    type="section">Limit</directive> bracket <strong>will have no
    effect</strong>. The following example applies the access control
    only to the methods <code>POST</code>, <code>PUT</code>, and
    <code>DELETE</code>, leaving all other methods unprotected:</p>

    <highlight language="config">
&lt;Limit POST PUT DELETE&gt;
  Require valid-user
&lt;/Limit&gt;
    </highlight>

    <p>The method names listed can be one or more of: <code>GET</code>,
    <code>POST</code>, <code>PUT</code>, <code>DELETE</code>,
    <code>CONNECT</code>, <code>OPTIONS</code>,
    <code>PATCH</code>, <code>PROPFIND</code>, <code>PROPPATCH</code>,
    <code>MKCOL</code>, <code>COPY</code>, <code>MOVE</code>,
    <code>LOCK</code>, and <code>UNLOCK</code>. <strong>The method name is
    case-sensitive.</strong> If <code>GET</code> is used, it will also
    restrict <code>HEAD</code> requests. The <code>TRACE</code> method
    cannot be limited (see <directive module="core"
    >TraceEnable</directive>).</p>

    <note type="warning">A <directive type="section"
    module="core">LimitExcept</directive> section should always be
    used in preference to a <directive type="section">Limit</directive>
    section when restricting access, since a <directive type="section"
    module="core">LimitExcept</directive> section provides protection
    against arbitrary methods.</note>

    <p>The <directive type="section">Limit</directive> and
    <directive type="section" module="core">LimitExcept</directive>
    directives may be nested.  In this case, each successive level of
    <directive type="section">Limit</directive> or <directive
    type="section" module="core">LimitExcept</directive> directives must
    further restrict the set of methods to which access controls apply.</p>

    <note type="warning">When using
    <directive type="section">Limit</directive> or
    <directive type="section">LimitExcept</directive> directives with
    the <directive module="mod_authz_core">Require</directive> directive,
    note that the first <directive module="mod_authz_core">Require</directive>
    to succeed authorizes the request, regardless of the presence of other
    <directive module="mod_authz_core">Require</directive> directives.</note>

    <p>For example, given the following configuration, all users will
    be authorized for <code>POST</code> requests, and the
    <code>Require group editors</code> directive will be ignored
    in all cases:</p>

    <highlight language="config">
&lt;LimitExcept GET&gt;
  Require valid-user
&lt;/LimitExcept&gt;
&lt;Limit POST&gt;
  Require group editors
&lt;/Limit&gt;
    </highlight>
</usage>
</directivesynopsis>

<directivesynopsis type="section">
<name>LimitExcept</name>
<description>Restrict access controls to all HTTP methods
except the named ones</description>
<syntax>&lt;LimitExcept <var>method</var> [<var>method</var>] ... &gt; ...
    &lt;/LimitExcept&gt;</syntax>
<contextlist><context>directory</context><context>.htaccess</context>
</contextlist>
<override>AuthConfig, Limit</override>

<usage>
    <p><directive type="section">LimitExcept</directive> and
    <code>&lt;/LimitExcept&gt;</code> are used to enclose
    a group of access control directives which will then apply to any
    HTTP access method <strong>not</strong> listed in the arguments;
    i.e., it is the opposite of a <directive type="section"
    module="core">Limit</directive> section and can be used to control
    both standard and nonstandard/unrecognized methods. See the
    documentation for <directive module="core"
    type="section">Limit</directive> for more details.</p>

    <p>For example:</p>

    <highlight language="config">
&lt;LimitExcept POST GET&gt;
  Require valid-user
&lt;/LimitExcept&gt;
    </highlight>

</usage>
</directivesynopsis>

<directivesynopsis>
<name>LimitInternalRecursion</name>
<description>Determine maximum number of internal redirects and nested
subrequests</description>
<syntax>LimitInternalRecursion <var>number</var> [<var>number</var>]</syntax>
<default>LimitInternalRecursion 10</default>
<contextlist><context>server config</context><context>virtual host</context>
</contextlist>

<usage>
    <p>An internal redirect happens, for example, when using the <directive
    module="mod_actions">Action</directive> directive, which internally
    redirects the original request to a CGI script. A subrequest is Apache httpd's
    mechanism to find out what would happen for some URI if it were requested.
    For example, <module>mod_dir</module> uses subrequests to look for the
    files listed in the <directive module="mod_dir">DirectoryIndex</directive>
    directive.</p>

    <p><directive>LimitInternalRecursion</directive> prevents the server
    from crashing when entering an infinite loop of internal redirects or
    subrequests. Such loops are usually caused by misconfigurations.</p>

    <p>The directive stores two different limits, which are evaluated on
    per-request basis. The first <var>number</var> is the maximum number of
    internal redirects that may follow each other. The second <var>number</var>
    determines how deeply subrequests may be nested. If you specify only one
    <var>number</var>, it will be assigned to both limits.</p>

    <highlight language="config">
LimitInternalRecursion 5
    </highlight>
</usage>
</directivesynopsis>

<directivesynopsis>
<name>LimitRequestBody</name>
<description>Restricts the total size of the HTTP request body sent
from the client</description>
<syntax>LimitRequestBody <var>bytes</var></syntax>
<default>LimitRequestBody 1073741824</default>
<contextlist><context>server config</context><context>virtual host</context>
<context>directory</context><context>.htaccess</context>
</contextlist>
<override>All</override>
<compatibility>In Apache HTTP Server 2.4.53 and earlier, the default value
was 0 (unlimited)</compatibility>

<usage>
    <p>This directive specifies the number of <var>bytes</var>
    that are allowed in a request body. A value of <var>0</var> means unlimited.</p>

    <p>The <directive>LimitRequestBody</directive> directive allows
    the user to set a limit on the allowed size of an HTTP request
    message body within the context in which the directive is given
    (server, per-directory, per-file or per-location). If the client
    request exceeds that limit, the server will return an error
    response instead of servicing the request. The size of a normal
    request message body will vary greatly depending on the nature of
    the resource and the methods allowed on that resource. CGI scripts
    typically use the message body for retrieving form information.
    Implementations of the <code>PUT</code> method will require
    a value at least as large as any representation that the server
    wishes to accept for that resource.</p>

    <p>This directive gives the server administrator greater
    control over abnormal client request behavior, which may be
    useful for avoiding some forms of denial-of-service
    attacks.</p>

    <p>If, for example, you are permitting file upload to a particular
    location and wish to limit the size of the uploaded file to 100K,
    you might use the following directive:</p>

    <highlight language="config">
LimitRequestBody 102400
    </highlight>

</usage>
</directivesynopsis>

<directivesynopsis>
<name>LimitRequestFields</name>
<description>Limits the number of HTTP request header fields that
will be accepted from the client</description>
<syntax>LimitRequestFields <var>number</var></syntax>
<default>LimitRequestFields 100</default>
<contextlist><context>server config</context><context>virtual host</context></contextlist>

<usage>
    <p>Setting <var>number</var> at 0 means unlimited.
    The default value is defined by the compile-time
    constant <code>DEFAULT_LIMIT_REQUEST_FIELDS</code> (100 as
    distributed).</p>

    <p>The <directive>LimitRequestFields</directive> directive allows
    the server administrator to modify the limit on the number of
    request header fields allowed in an HTTP request. A server needs
    this value to be larger than the number of fields that a normal
    client request might include. The number of request header fields
    used by a client rarely exceeds 20, but this may vary among
    different client implementations, often depending upon the extent
    to which a user has configured their browser to support detailed
    content negotiation. Optional HTTP extensions are often expressed
    using request header fields.</p>

    <p>This directive gives the server administrator greater
    control over abnormal client request behavior, which may be
    useful for avoiding some forms of denial-of-service attacks.
    The value should be increased if normal clients see an error
    response from the server that indicates too many fields were
    sent in the request.</p>

    <p>For example:</p>

    <highlight language="config">
LimitRequestFields 50
    </highlight>

     <note type="warning"><title>Warning</title>
     <p> When name-based virtual hosting is used, the value for this
     directive is taken from the default (first-listed) virtual host for the
     local IP and port combination.</p>
     </note>

</usage>
</directivesynopsis>

<directivesynopsis>
<name>LimitRequestFieldSize</name>
<description>Limits the size of the HTTP request header allowed from the
client</description>
<syntax>LimitRequestFieldSize <var>bytes</var></syntax>
<default>LimitRequestFieldSize 8190</default>
<contextlist><context>server config</context><context>virtual host</context></contextlist>

<usage>
    <p>This directive specifies the number of <var>bytes</var>
    that will be allowed in an HTTP request header.</p>

    <p>The <directive>LimitRequestFieldSize</directive> directive
    allows the server administrator to set the limit
    on the allowed size of an HTTP request header field. A server
    needs this value to be large enough to hold any one header field
    from a normal client request. The size of a normal request header
    field will vary greatly among different client implementations,
    often depending upon the extent to which a user has configured
    their browser to support detailed content negotiation. SPNEGO
    authentication headers can be up to 12392 bytes.</p>

    <p>This directive gives the server administrator greater
    control over abnormal client request behavior, which may be
    useful for avoiding some forms of denial-of-service attacks.</p>

    <p>For example:</p>

    <highlight language="config">
LimitRequestFieldSize 4094
    </highlight>

    <note>Under normal conditions, the value should not be changed from
    the default.</note>

    <note type="warning"><title>Warning</title>
    <p> When name-based virtual hosting is used, the value for this
    directive is taken from the default (first-listed) virtual host best
    matching the current IP address and port combination.</p>
    </note>
</usage>
</directivesynopsis>

<directivesynopsis>
<name>LimitRequestLine</name>
<description>Limit the size of the HTTP request line that will be accepted
from the client</description>
<syntax>LimitRequestLine <var>bytes</var></syntax>
<default>LimitRequestLine 8190</default>
<contextlist><context>server config</context><context>virtual host</context></contextlist>

<usage>
    <p>This directive sets the number of <var>bytes</var> that will be
    allowed on the HTTP request-line.</p>

    <p>The <directive>LimitRequestLine</directive> directive allows
    the server administrator to set the limit on the allowed size
    of a client's HTTP request-line. Since the request-line consists of the
    HTTP method, URI, and protocol version, the
    <directive>LimitRequestLine</directive> directive places a
    restriction on the length of a request-URI allowed for a request
    on the server. A server needs this value to be large enough to
    hold any of its resource names, including any information that
    might be passed in the query part of a <code>GET</code> request.</p>

    <p>This directive gives the server administrator greater
    control over abnormal client request behavior, which may be
    useful for avoiding some forms of denial-of-service attacks.</p>

    <p>For example:</p>

    <highlight language="config">
LimitRequestLine 4094
    </highlight>

    <note>Under normal conditions, the value should not be changed from
    the default.</note>

    <note type="warning"><title>Warning</title>
    <p> When name-based virtual hosting is used, the value for this
    directive is taken from the default (first-listed) virtual host best
    matching the current IP address and port combination.</p>
    </note>

</usage>
</directivesynopsis>

<directivesynopsis>
<name>LimitXMLRequestBody</name>
<description>Limits the size of an XML-based request body</description>
<syntax>LimitXMLRequestBody <var>bytes</var></syntax>
<default>LimitXMLRequestBody 1000000</default>
<contextlist><context>server config</context><context>virtual host</context>
<context>directory</context><context>.htaccess</context></contextlist>
<override>All</override>

<usage>
    <p>Limit (in bytes) on the maximum size of an XML-based request
    body. A value of <code>0</code> will apply a hard limit (depending on
    32bit vs 64bit system) allowing for XML escaping within the bounds of
    the system addressable memory, but it exists for compatibility only
    and is not recommended since it does not account for memory consumed
    elsewhere or concurrent requests, which might result in an overall
    system out-of-memory.
    </p>
    <p>Example:</p>

    <highlight language="config">
# Limit of 1 MiB
LimitXMLRequestBody 1073741824
    </highlight>

</usage>
</directivesynopsis>

<directivesynopsis type="section">
<name>Location</name>
<description>Applies the enclosed directives only to matching
URLs</description>
<syntax>&lt;Location
    <var>URL-path</var>|<var>URL</var>&gt; ... &lt;/Location&gt;</syntax>
<contextlist><context>server config</context><context>virtual host</context>
</contextlist>

<usage>
    <p>The <directive type="section">Location</directive> directive
    limits the scope of the enclosed directives by URL. It is similar to the
    <directive type="section" module="core">Directory</directive>
    directive, and starts a subsection which is terminated with a
    <code>&lt;/Location&gt;</code> directive. <directive
    type="section">Location</directive> sections are processed in the
    order they appear in the configuration file, after the <directive
    type="section" module="core">Directory</directive> sections and
    <code>.htaccess</code> files are read, and after the <directive
    type="section" module="core">Files</directive> sections.</p>

    <p><directive type="section">Location</directive> sections operate
    completely outside the filesystem.  This has several consequences.
    Most importantly, <directive type="section">Location</directive>
    directives should not be used to control access to filesystem
    locations.  Since several different URLs may map to the same
    filesystem location, such access controls may by circumvented.</p>

    <p>The enclosed directives will be applied to the request if the path component
    of the URL meets <em>any</em> of the following criteria:
    </p>
    <ul>
      <li>The specified location matches exactly the path component of the URL.
      </li>
      <li>The specified location, which ends in a forward slash, is a prefix
      of the path component of the URL (treated as a context root).
      </li>
      <li>The specified location, with the addition of a trailing slash, is a
      prefix of the path component of the URL (also treated as a context root).
      </li>
    </ul>
    <p>
    In the example below, where no trailing slash is used, requests to
    /private1, /private1/ and /private1/file.txt will have the enclosed
    directives applied, but /private1other would not.
    </p>
    <highlight language="config">
&lt;Location "/private1"&gt;
    #  ...
&lt;/Location&gt;
    </highlight>
    <p>
    In the example below, where a trailing slash is used, requests to
    /private2/ and /private2/file.txt will have the enclosed
    directives applied, but /private2 and /private2other would not.
    </p>
    <highlight language="config">
&lt;Location "/private2<em>/</em>"&gt;
    # ...
&lt;/Location&gt;
    </highlight>

    <note><title>When to use <directive
    type="section">Location</directive></title>

    <p>Use <directive type="section">Location</directive> to apply
    directives to content that lives outside the filesystem.  For
    content that lives in the filesystem, use <directive
    type="section" module="core">Directory</directive> and <directive
    type="section" module="core">Files</directive>.  An exception is
    <code>&lt;Location "/"&gt;</code>, which is an easy way to
    apply a configuration to the entire server.</p>
    </note>

    <p>For all origin (non-proxy) requests, the URL to be matched is a
    URL-path of the form <code>/path/</code>.  <em>No scheme, hostname,
    port, or query string may be included.</em>  For proxy requests, the
    URL to be matched is of the form
    <code>scheme://servername/path</code>, and you must include the
    prefix.</p>

    <p>The URL may use wildcards. In a wild-card string, <code>?</code> matches
    any single character, and <code>*</code> matches any sequences of
    characters. Neither wildcard character matches a / in the URL-path.</p>

    <p><glossary ref="regex">Regular expressions</glossary>
    can also be used, with the addition of the <code>~</code>
    character. For example:</p>

    <highlight language="config">
&lt;Location ~ "/(extra|special)/data"&gt;
    #...
&lt;/Location&gt;
    </highlight>

    <p>would match URLs that contained the substring <code>/extra/data</code>
    or <code>/special/data</code>. The directive <directive
    type="section" module="core">LocationMatch</directive> behaves
    identical to the regex version of <directive
    type="section">Location</directive>, and is preferred, for the
    simple reason that <code>~</code> is hard to distinguish from
    <code>-</code> in many fonts.</p>

    <p>The <directive type="section">Location</directive>
    functionality is especially useful when combined with the
    <directive module="core">SetHandler</directive>
    directive. For example, to enable status requests but allow them
    only from browsers at <code>example.com</code>, you might use:</p>

    <highlight language="config">
&lt;Location "/status"&gt;
  SetHandler server-status
  Require host example.com
&lt;/Location&gt;
    </highlight>

    <note><title>Note about / (slash)</title>
      <p>The slash character has special meaning depending on where in a
      URL it appears. People may be used to its behavior in the filesystem
      where multiple adjacent slashes are frequently collapsed to a single
      slash (<em>i.e.</em>, <code>/home///foo</code> is the same as
      <code>/home/foo</code>). In URL-space this is not necessarily true if
      directive <directive module="core">MergeSlashes</directive>  has been set
      to "OFF".
      The <directive type="section" module="core">LocationMatch</directive>
      directive and the regex version of <directive type="section"
      >Location</directive> require you to explicitly specify multiple
      slashes if the slashes are not being merged.</p>

      <p>For example, <code>&lt;LocationMatch "^/abc"&gt;</code> would match
      the request URL <code>/abc</code> but not the request URL <code>
      //abc</code>. The (non-regex) <directive type="section"
      >Location</directive> directive behaves similarly when used for
      proxy requests. But when (non-regex) <directive type="section"
      >Location</directive> is used for non-proxy requests it will
      implicitly match multiple slashes with a single slash. For example,
      if you specify <code>&lt;Location "/abc/def"&gt;</code> and the
      request is to <code>/abc//def</code> then it will match.</p>
    </note>
</usage>
<seealso><a href="../sections.html">How &lt;Directory&gt;, &lt;Location&gt;
    and &lt;Files&gt; sections work</a> for an explanation of how these
    different sections are combined when a request is received.</seealso>
<seealso><directive module="core">LocationMatch</directive></seealso>
</directivesynopsis>

<directivesynopsis type="section">
<name>LocationMatch</name>
<description>Applies the enclosed directives only to regular-expression
matching URLs</description>
<syntax>&lt;LocationMatch
    <var>regex</var>&gt; ... &lt;/LocationMatch&gt;</syntax>
<contextlist><context>server config</context><context>virtual host</context>
</contextlist>

<usage>
    <p>The <directive type="section">LocationMatch</directive> directive
    limits the scope of the enclosed directives by URL, in an identical manner
    to <directive module="core" type="section">Location</directive>. However,
    it takes a <glossary ref="regex">regular expression</glossary>
    as an argument instead of a simple string. For example:</p>

    <highlight language="config">
&lt;LocationMatch "/(extra|special)/data"&gt;
    # ...
&lt;/LocationMatch&gt;
    </highlight>

    <p>would match URLs that contained the substring <code>/extra/data</code>
    or <code>/special/data</code>.</p>

    <note><p>If the intent is that a URL <strong>starts with</strong>
    <code>/extra/data</code>, rather than merely
    <strong>contains</strong> <code>/extra/data</code>, prefix the
    regular expression with a <code>^</code> to require this.</p>

    <highlight language="config">
&lt;LocationMatch "^/(extra|special)/data"&gt;
    </highlight>
    </note>

    <p>From 2.4.8 onwards, named groups and backreferences are captured and
    written to the environment with the corresponding name prefixed with
    "MATCH_" and in upper case. This allows elements of URLs to be referenced
    from within <a href="../expr.html">expressions</a> and modules like
    <module>mod_rewrite</module>. In order to prevent confusion, numbered
    (unnamed) backreferences are ignored. Use named groups instead.</p>

    <highlight language="config">
&lt;LocationMatch "^/combined/(?&lt;sitename&gt;[^/]+)"&gt;
    Require ldap-group cn=%{env:MATCH_SITENAME},ou=combined,o=Example
&lt;/LocationMatch&gt;
    </highlight>

     <note><title>Note about / (slash)</title>
      <p>The slash character has special meaning depending on where in a
      URL it appears. People may be used to its behavior in the filesystem
      where multiple adjacent slashes are frequently collapsed to a single
      slash (<em>i.e.</em>, <code>/home///foo</code> is the same as
      <code>/home/foo</code>). In URL-space this is not necessarily true if
      directive <directive module="core">MergeSlashes</directive>  has been set
      to "OFF".
      The <directive type="section" module="core">LocationMatch</directive>
      directive and the regex version of <directive type="section"
      >Location</directive> require you to explicitly specify multiple
      slashes if the slashes are not being merged.</p>

      <p>For example, <code>&lt;LocationMatch "^/abc"&gt;</code> would match
      the request URL <code>/abc</code> but not the request URL <code>
      //abc</code>. The (non-regex) <directive type="section"
      >Location</directive> directive behaves similarly when used for
      proxy requests. But when (non-regex) <directive type="section"
      >Location</directive> is used for non-proxy requests it will
      implicitly match multiple slashes with a single slash. For example,
      if you specify <code>&lt;Location "/abc/def"&gt;</code> and the
      request is to <code>/abc//def</code> then it will match.</p>
    </note>
</usage>

<seealso><a href="../sections.html">How &lt;Directory&gt;, &lt;Location&gt;
    and &lt;Files&gt; sections work</a> for an explanation of how these
    different sections are combined when a request is received</seealso>
</directivesynopsis>

<directivesynopsis>
<name>LogLevel</name>
<description>Controls the verbosity of the ErrorLog</description>
<syntax>LogLevel [<var>module</var>:]<var>level</var>
    [<var>module</var>:<var>level</var>] ...
</syntax>
<default>LogLevel warn</default>
<contextlist><context>server config</context><context>virtual host</context>
<context>directory</context>
</contextlist>
<compatibility>Per-module and per-directory configuration is available in
    Apache HTTP Server 2.3.6 and later</compatibility>

<usage>
    <p><directive>LogLevel</directive> adjusts the verbosity of the
    messages recorded in the error logs (see <directive
    module="core">ErrorLog</directive> directive). The following
    <var>level</var>s are available, in order of decreasing
    significance:</p>

    <table border="1">
    <columnspec><column width=".2"/><column width=".3"/><column width=".5"/>
    </columnspec>
      <tr>
        <th><strong>Level</strong> </th>

        <th><strong>Description</strong> </th>

        <th><strong>Example</strong> </th>
      </tr>

      <tr>
        <td><code>emerg</code> </td>

        <td>Emergencies - system is unusable.</td>

        <td>"Child cannot open lock file. Exiting"</td>
      </tr>

      <tr>
        <td><code>alert</code> </td>

        <td>Action must be taken immediately.</td>

        <td>"getpwuid: couldn't determine user name from uid"</td>
      </tr>

      <tr>
        <td><code>crit</code> </td>

        <td>Critical Conditions.</td>

        <td>"socket: Failed to get a socket, exiting child"</td>
      </tr>

      <tr>
        <td><code>error</code> </td>

        <td>Error conditions.</td>

        <td>"Premature end of script headers"</td>
      </tr>

      <tr>
        <td><code>warn</code> </td>

        <td>Warning conditions.</td>

        <td>"child process 1234 did not exit, sending another
        SIGHUP"</td>
      </tr>

      <tr>
        <td><code>notice</code> </td>

        <td>Normal but significant condition.</td>

        <td>"httpd: caught SIGBUS, attempting to dump core in
        ..."</td>
      </tr>

      <tr>
        <td><code>info</code> </td>

        <td>Informational.</td>

        <td>"Server seems busy, (you may need to increase
        StartServers, or Min/MaxSpareServers)..."</td>
      </tr>

      <tr>
        <td><code>debug</code> </td>

        <td>Debug-level messages</td>

        <td>"Opening config file ..."</td>
      </tr>
      <tr>
        <td><code>trace1</code> </td>

        <td>Trace messages</td>

        <td>"proxy: FTP: control connection complete"</td>
      </tr>
      <tr>
        <td><code>trace2</code> </td>

        <td>Trace messages</td>

        <td>"proxy: CONNECT: sending the CONNECT request to the remote proxy"</td>
      </tr>
      <tr>
        <td><code>trace3</code> </td>

        <td>Trace messages</td>

        <td>"openssl: Handshake: start"</td>
      </tr>
      <tr>
        <td><code>trace4</code> </td>

        <td>Trace messages</td>

        <td>"read from buffered SSL brigade, mode 0, 17 bytes"</td>
      </tr>
      <tr>
        <td><code>trace5</code> </td>

        <td>Trace messages</td>

        <td>"map lookup FAILED: map=rewritemap key=keyname"</td>
      </tr>
      <tr>
        <td><code>trace6</code> </td>

        <td>Trace messages</td>

        <td>"cache lookup FAILED, forcing new map lookup"</td>
      </tr>
      <tr>
        <td><code>trace7</code> </td>

        <td>Trace messages, dumping large amounts of data</td>

        <td>"| 0000: 02 23 44 30 13 40 ac 34 df 3d bf 9a 19 49 39 15 |"</td>
      </tr>
      <tr>
        <td><code>trace8</code> </td>

        <td>Trace messages, dumping large amounts of data</td>

        <td>"| 0000: 02 23 44 30 13 40 ac 34 df 3d bf 9a 19 49 39 15 |"</td>
      </tr>
    </table>

    <p>When a particular level is specified, messages from all
    other levels of higher significance will be reported as well.
    <em>E.g.</em>, when <code>LogLevel info</code> is specified,
    then messages with log levels of <code>notice</code> and
    <code>warn</code> will also be posted.</p>

    <p>Using a level of at least <code>crit</code> is
    recommended.</p>

    <p>For example:</p>

    <highlight language="config">
LogLevel notice
    </highlight>

    <note><title>Note</title>
      <p>When logging to a regular file, messages of the level
      <code>notice</code> cannot be suppressed and thus are always
      logged. However, this doesn't apply when logging is done
      using <code>syslog</code>.</p>
    </note>

    <p>Specifying a level without a module name will reset the level
    for all modules to that level.  Specifying a level with a module
    name will set the level for that module only. It is possible to
    use the module source file name, the module identifier, or the
    module identifier with the trailing <code>_module</code> omitted
    as module specification. This means the following three specifications
    are equivalent:</p>

    <highlight language="config">
LogLevel info ssl:warn
LogLevel info mod_ssl.c:warn
LogLevel info ssl_module:warn
    </highlight>

    <p>It is also possible to change the level per directory:</p>

    <highlight language="config">
LogLevel info
&lt;Directory "/usr/local/apache/htdocs/app"&gt;
  LogLevel debug
&lt;/Directory&gt;
    </highlight>

    <note>
        Per directory loglevel configuration only affects messages that are
        logged after the request has been parsed and that are associated with
        the request. Log messages which are associated with the server or
        the connection are not affected. The latter can be influenced by the
        <directive module="core">LogLevelOverride</directive> directive,
        though.
    </note>
</usage>
<seealso><directive module="core">ErrorLog</directive></seealso>
<seealso><directive module="core">ErrorLogFormat</directive></seealso>
<seealso><directive module="core">LogLevelOverride</directive></seealso>
<seealso><a href="../logs.html">Apache HTTP Server Log Files</a></seealso>
</directivesynopsis>

<directivesynopsis>
<name>LogLevelOverride</name>
<description>Override the verbosity of the ErrorLog for certain clients</description>
<syntax>LogLevel <var>ipaddress</var>[/<var>prefixlen</var>]
    [<var>module</var>:]<var>level</var> [<var>module</var>:<var>level</var>] ...
</syntax>
<default>unset</default>
<contextlist><context>server config</context><context>virtual host</context>
</contextlist>
<compatibility>Available in Apache HTTP Server 2.5.0 and later</compatibility>

<usage>
    <p><directive>LogLevelOverride</directive> adjusts the
    <directive module="core">LogLevel</directive> for requests coming from
    certain client IP addresses.
    This allows to enable verbose logging only for certain test clients.
    The IP address is checked at a very early state in the connection
    processing.  Therefore, <directive>LogLevelOverride</directive> allows to
    change the log level for things like the SSL handshake which happen before
    a <directive module="core">LogLevel</directive> directive in an
    <directive type="section" module="core">If</directive> container would
    be evaluated.</p>

    <p><directive>LogLevelOverride</directive> accepts either a single
    IP-address or a CIDR IP-address/len subnet specification.
    For the syntax of the loglevel specification, see the
    <directive module="core">LogLevel</directive> directive.</p>

    <p>For requests that match a <directive>LogLevelOverride</directive>
    directive, per-directory specifications of
    <directive module="core">LogLevel</directive> are ignored.</p>

    <p>Examples:</p>

    <highlight language="config">
    LogLevelOverride 192.0.2.0/24 ssl:trace6
    LogLevelOverride 192.0.2.7 ssl:trace8
    </highlight>

    <note>
        <directive>LogLevelOverride</directive> only affects
        log messages that are associated with the request or the connection.
        Log messages which are associated with the server are not affected.
    </note>

</usage>
<seealso><directive module="core">LogLevel</directive></seealso>
</directivesynopsis>

<directivesynopsis>
<name>MaxKeepAliveRequests</name>
<description>Number of requests allowed on a persistent
connection</description>
<syntax>MaxKeepAliveRequests <var>number</var></syntax>
<default>MaxKeepAliveRequests 100</default>
<contextlist><context>server config</context><context>virtual host</context>
</contextlist>

<usage>
    <p>The <directive>MaxKeepAliveRequests</directive> directive
    limits the number of requests allowed per connection when
    <directive module="core" >KeepAlive</directive> is on. If it is
    set to <code>0</code>, unlimited requests will be allowed. We
    recommend that this setting be kept to a high value for maximum
    server performance.</p>

    <p>For example:</p>

    <highlight language="config">
MaxKeepAliveRequests 500
    </highlight>
</usage>
</directivesynopsis>

<directivesynopsis>
<name>MaxRanges</name>
<description>Number of ranges allowed before returning the complete
resource </description>
<syntax>MaxRanges default | unlimited | none | <var>number-of-ranges</var></syntax>
<default>MaxRanges 200</default>
<contextlist><context>server config</context><context>virtual host</context>
<context>directory</context>
</contextlist>
<compatibility>Available in Apache HTTP Server 2.3.15 and later</compatibility>

<usage>
    <p>The <directive>MaxRanges</directive> directive
    limits the number of HTTP ranges the server is willing to
    return to the client. If more ranges than permitted are requested,
    the complete resource is returned instead.</p>

    <dl>
      <dt><strong>default</strong></dt>
      <dd>Limits the number of ranges to a compile-time default of 200.</dd>

      <dt><strong>none</strong></dt>
      <dd>Range headers are ignored.</dd>

      <dt><strong>unlimited</strong></dt>
      <dd>The server does not limit the number of ranges it is
          willing to satisfy.</dd>

      <dt><var>number-of-ranges</var></dt>
      <dd>A positive number representing the maximum number of ranges the
      server is willing to satisfy.</dd>
    </dl>
</usage>
</directivesynopsis>

<directivesynopsis>
    <name>MaxRangeOverlaps</name>
    <description>Number of overlapping ranges (eg: <code>100-200,150-300</code>) allowed before returning the complete
        resource </description>
    <syntax>MaxRangeOverlaps default | unlimited | none | <var>number-of-ranges</var></syntax>
    <default>MaxRangeOverlaps 20</default>
    <contextlist><context>server config</context><context>virtual host</context>
        <context>directory</context>
    </contextlist>
    <compatibility>Available in Apache HTTP Server 2.3.15 and later</compatibility>

    <usage>
        <p>The <directive>MaxRangeOverlaps</directive> directive
            limits the number of overlapping HTTP ranges the server is willing to
            return to the client. If more overlapping ranges than permitted are requested,
            the complete resource is returned instead.</p>

        <dl>
            <dt><strong>default</strong></dt>
            <dd>Limits the number of overlapping ranges to a compile-time default of 20.</dd>

            <dt><strong>none</strong></dt>
            <dd>No overlapping Range headers are allowed.</dd>

            <dt><strong>unlimited</strong></dt>
            <dd>The server does not limit the number of overlapping ranges it is
                willing to satisfy.</dd>

            <dt><var>number-of-ranges</var></dt>
            <dd>A positive number representing the maximum number of overlapping ranges the
                server is willing to satisfy.</dd>
        </dl>
    </usage>
</directivesynopsis>

<directivesynopsis>
    <name>MaxRangeReversals</name>
    <description>Number of range reversals (eg: <code>100-200,50-70</code>) allowed before returning the complete
        resource </description>
    <syntax>MaxRangeReversals default | unlimited | none | <var>number-of-ranges</var></syntax>
    <default>MaxRangeReversals 20</default>
    <contextlist><context>server config</context><context>virtual host</context>
        <context>directory</context>
    </contextlist>
    <compatibility>Available in Apache HTTP Server 2.3.15 and later</compatibility>

    <usage>
        <p>The <directive>MaxRangeReversals</directive> directive
            limits the number of HTTP Range reversals the server is willing to
            return to the client. If more ranges reversals than permitted are requested,
            the complete resource is returned instead.</p>

        <dl>
            <dt><strong>default</strong></dt>
            <dd>Limits the number of range reversals to a compile-time default of 20.</dd>

            <dt><strong>none</strong></dt>
            <dd>No Range reversals headers are allowed.</dd>

            <dt><strong>unlimited</strong></dt>
            <dd>The server does not limit the number of range reversals it is
                willing to satisfy.</dd>

            <dt><var>number-of-ranges</var></dt>
            <dd>A positive number representing the maximum number of range reversals the
                server is willing to satisfy.</dd>
        </dl>
    </usage>
</directivesynopsis>

<directivesynopsis>
<name>Mutex</name>
<description>Configures mutex mechanism and lock file directory for all
or specified mutexes</description>
<syntax>Mutex <var>mechanism</var> [default|<var>mutex-name</var>] ... [OmitPID]</syntax>
<default>Mutex default</default>
<contextlist><context>server config</context></contextlist>
<compatibility>Available in Apache HTTP Server 2.3.4 and later</compatibility>

<usage>
    <p>The <directive>Mutex</directive> directive sets the mechanism,
    and optionally the lock file location, that httpd and modules use
    to serialize access to resources.  Specify <code>default</code> as
    the second argument to change the settings for all mutexes; specify
    a mutex name (see table below) as the second argument to override
    defaults only for that mutex.</p>

    <p>The <directive>Mutex</directive> directive is typically used in
    the following exceptional situations:</p>

    <ul>
        <li>change the mutex mechanism when the default mechanism selected
        by <glossary>APR</glossary> has a functional or performance
        problem</li>

        <li>change the directory used by file-based mutexes when the
        default directory does not support locking</li>
    </ul>

    <note><title>Supported modules</title>
    <p>This directive only configures mutexes which have been registered
    with the core server using the <code>ap_mutex_register()</code> API.
    All modules bundled with httpd support the <directive>Mutex</directive>
    directive, but third-party modules may not.  Consult the documentation
    of the third-party module, which must indicate the mutex name(s) which
    can be configured if this directive is supported.</p>
    </note>

    <p>The following mutex <em>mechanisms</em> are available:</p>
    <ul>
        <li><code>default | yes</code>
        <p>This selects the default locking implementation, as determined by
        <glossary>APR</glossary>.  The default locking implementation can
        be displayed by running <program>httpd</program> with the
        <code>-V</code> option.</p></li>

        <li><code>none | no</code>
        <p>This effectively disables the mutex, and is only allowed for a
        mutex if the module indicates that it is a valid choice.  Consult the
        module documentation for more information.</p></li>

        <li><code>posixsem</code>
        <p>This is a mutex variant based on a Posix semaphore.</p>

        <note type="warning"><title>Warning</title>
        <p>The semaphore ownership is not recovered if a thread in the process
        holding the mutex segfaults, resulting in a hang of the web server.</p>
        </note>
        </li>

        <li><code>sysvsem</code>
        <p>This is a mutex variant based on a SystemV IPC semaphore.</p>

        <note type="warning"><title>Warning</title>
        <p>It is possible to "leak" SysV semaphores if processes crash
        before the semaphore is removed.</p>
	</note>

        <note type="warning"><title>Security</title>
        <p>The semaphore API allows for a denial of service attack by any
        CGIs running under the same uid as the webserver (<em>i.e.</em>,
        all CGIs, unless you use something like <program>suexec</program>
        or <code>cgiwrapper</code>).</p>
	</note>
        </li>

        <li><code>sem</code>
        <p>This selects the "best" available semaphore implementation, choosing
        between Posix and SystemV IPC semaphores, in that order.</p></li>

        <li><code>pthread</code>
        <p>This is a mutex variant based on cross-process Posix thread
        mutexes.</p>

        <note type="warning"><title>Warning</title>
        <p>On most systems, if a child process terminates abnormally while
        holding a mutex that uses this implementation, the server will deadlock
        and stop responding to requests.  When this occurs, the server will
        require a manual restart to recover.</p>
        <p>Solaris and Linux are notable exceptions as they provide a mechanism which
        usually allows the mutex to be recovered after a child process
        terminates abnormally while holding a mutex.</p>
        <p>If your system is POSIX compliant or if it implements the
        <code>pthread_mutexattr_setrobust_np()</code> function, you may be able
        to use the <code>pthread</code> option safely.</p>
        </note>
        </li>

        <li><code>fcntl:/path/to/mutex</code>
        <p>This is a mutex variant where a physical (lock-)file and the
        <code>fcntl()</code> function are used as the mutex.</p>

        <note type="warning"><title>Warning</title>
        <p>When multiple mutexes based on this mechanism are used within
        multi-threaded, multi-process environments, deadlock errors (EDEADLK)
        can be reported for valid mutex operations if <code>fcntl()</code>
        is not thread-aware, such as on Solaris.</p>
	</note>
        </li>

        <li><code>flock:/path/to/mutex</code>
        <p>This is similar to the <code>fcntl:/path/to/mutex</code> method
        with the exception that the <code>flock()</code> function is used to
        provide file locking.</p></li>

        <li><code>file:/path/to/mutex</code>
        <p>This selects the "best" available file locking implementation,
        choosing between <code>fcntl</code> and <code>flock</code>, in that
        order.</p></li>
    </ul>

    <p>Most mechanisms are only available on selected platforms, where the
    underlying platform and <glossary>APR</glossary> support it.  Mechanisms
    which aren't available on all platforms are <em>posixsem</em>,
    <em>sysvsem</em>, <em>sem</em>, <em>pthread</em>, <em>fcntl</em>,
    <em>flock</em>, and <em>file</em>.</p>

    <p>With the file-based mechanisms <em>fcntl</em> and <em>flock</em>,
    the path, if provided, is a directory where the lock file will be created.
    The default directory is httpd's run-time file directory,
    <directive module="core">DefaultRuntimeDir</directive>.  If a relative
    path is provided, it is relative to
    <directive module="core">DefaultRuntimeDir</directive>.  Always use a local
    disk filesystem for <code>/path/to/mutex</code> and never a directory residing
    on a NFS- or AFS-filesystem.  The basename of the file will be the mutex
    type, an optional instance string provided by the module, and unless the
    <code>OmitPID</code> keyword is specified, the process id of the httpd
    parent process will be appended to make the file name unique, avoiding
    conflicts when multiple httpd instances share a lock file directory.  For
    example, if the mutex name is <code>mpm-accept</code> and the lock file
    directory is <code>/var/httpd/locks</code>, the lock file name for the
    httpd instance with parent process id 12345 would be
    <code>/var/httpd/locks/mpm-accept.12345</code>.</p>

    <note type="warning"><title>Security</title>
    <p>It is best to <em>avoid</em> putting mutex files in a world-writable
    directory such as <code>/var/tmp</code> because someone could create
    a denial of service attack and prevent the server from starting by
    creating a lockfile with the same name as the one the server will try
    to create.</p>
    </note>

    <p>The following table documents the names of mutexes used by httpd
    and bundled modules.</p>

    <table border="1" style="zebra">
        <tr>
            <th>Mutex name</th>
            <th>Module(s)</th>
            <th>Protected resource</th>
	</tr>
        <tr>
            <td><code>mpm-accept</code></td>
            <td><module>prefork</module> and <module>worker</module> MPMs</td>
            <td>incoming connections, to avoid the thundering herd problem;
            for more information, refer to the
            <a href="../misc/perf-tuning.html">performance tuning</a>
            documentation</td>
	</tr>
        <tr>
            <td><code>authdigest-client</code></td>
            <td><module>mod_auth_digest</module></td>
            <td>client list in shared memory</td>
	</tr>
        <tr>
            <td><code>authdigest-opaque</code></td>
            <td><module>mod_auth_digest</module></td>
            <td>counter in shared memory</td>
	</tr>
        <tr>
            <td><code>ldap-cache</code></td>
            <td><module>mod_ldap</module></td>
            <td>LDAP result cache</td>
	</tr>
        <tr>
            <td><code>rewrite-map</code></td>
            <td><module>mod_rewrite</module></td>
            <td>communication with external mapping programs, to avoid
            intermixed I/O from multiple requests</td>
	</tr>
        <tr>
            <td><code>ssl-cache</code></td>
            <td><module>mod_ssl</module></td>
            <td>SSL session cache</td>
	</tr>
        <tr>
            <td><code>ssl-stapling</code></td>
            <td><module>mod_ssl</module></td>
            <td>OCSP stapling response cache</td>
	</tr>
        <tr>
            <td><code>watchdog-callback</code></td>
            <td><module>mod_watchdog</module></td>
            <td>callback function of a particular client module</td>
	</tr>
    </table>

    <p>The <code>OmitPID</code> keyword suppresses the addition of the httpd
    parent process id from the lock file name.</p>

    <p>In the following example, the mutex mechanism for the MPM accept
    mutex will be changed from the compiled-in default to <code>fcntl</code>,
    with the associated lock file created in directory
    <code>/var/httpd/locks</code>.  The mutex mechanism for all other mutexes
    will be changed from the compiled-in default to <code>sysvsem</code>.</p>

    <highlight language="config">
Mutex sysvsem default
Mutex fcntl:/var/httpd/locks mpm-accept
    </highlight>
</usage>
</directivesynopsis>

<directivesynopsis>
<name>NameVirtualHost</name>
<description>DEPRECATED: Designates an IP address for name-virtual
hosting</description>
<syntax>NameVirtualHost <var>addr</var>[:<var>port</var>]</syntax>
<contextlist><context>server config</context></contextlist>

<usage>

<p>Prior to 2.3.11, <directive>NameVirtualHost</directive> was required
to instruct the server that a particular IP address and port combination
was usable as a name-based virtual host.  In 2.3.11 and later,
any time an IP address and port combination is used in multiple virtual
hosts, name-based virtual hosting is automatically enabled for that address.</p>

<p>This directive currently has no effect.</p>
</usage>

<seealso><a href="../vhosts/">Virtual Hosts
documentation</a></seealso>

</directivesynopsis>

<directivesynopsis>
<name>Options</name>
<description>Configures what features are available in a particular
directory</description>
<syntax>Options
    [+|-]<var>option</var> [[+|-]<var>option</var>] ...</syntax>
<default>Options FollowSymlinks</default>
<contextlist><context>server config</context><context>virtual host</context>
<context>directory</context><context>.htaccess</context>
</contextlist>
<override>Options</override>
<compatibility>The default was changed from All to FollowSymlinks in 2.3.11</compatibility>

<usage>
    <p>The <directive>Options</directive> directive controls which
    server features are available in a particular directory.</p>

    <p><var>option</var> can be set to <code>None</code>, in which
    case none of the extra features are enabled, or one or more of
    the following:</p>

    <dl>
      <dt><code>All</code></dt>

      <dd>All options except for <code>MultiViews</code>.</dd>

      <dt><code>ExecCGI</code></dt>

      <dd>
      Execution of CGI scripts using <module>mod_cgi</module>
      is permitted.</dd>

      <dt><code>FollowSymLinks</code></dt>

      <dd>
      The server will follow symbolic links in this directory. This is
      the default setting.
      <note>
      <p>Even though the server follows the symlink it does <em>not</em>
      change the pathname used to match against <directive type="section"
      module="core">Directory</directive> sections.</p>

      <p>The <code>FollowSymLinks</code> and
      <code>SymLinksIfOwnerMatch</code> <directive
      module="core">Options</directive> work only in <directive
      type="section" module="core">Directory</directive> sections or
      <code>.htaccess</code> files.</p>

      <p>Omitting this option should not be considered a security restriction,
      since symlink testing is subject to race conditions that make it
      circumventable.</p>
      </note></dd>

      <dt><code>Includes</code></dt>

      <dd>
      Server-side includes provided by <module>mod_include</module>
      are permitted.</dd>

      <dt><code>IncludesNOEXEC</code></dt>

      <dd>

      Server-side includes are permitted, but the <code>#exec
      cmd</code> and <code>#exec cgi</code> are disabled. It is still
      possible to <code>#include virtual</code> CGI scripts from
      <directive module="mod_alias">ScriptAlias</directive>ed
      directories.</dd>

      <dt><code>Indexes</code></dt>

      <dd>
      If a URL which maps to a directory is requested and there
      is no <directive module="mod_dir">DirectoryIndex</directive>
      (<em>e.g.</em>, <code>index.html</code>) in that directory, then
      <module>mod_autoindex</module> will return a formatted listing
      of the directory.</dd>

      <dt><code>MultiViews</code></dt>

      <dd>
      <a href="../content-negotiation.html">Content negotiated</a>
      "MultiViews" are allowed using
      <module>mod_negotiation</module>.
      <note><title>Note</title> <p>This option gets ignored if set
      anywhere other than <directive module="core" type="section"
      >Directory</directive>, as <module>mod_negotiation</module>
      needs real resources to compare against and evaluate from.</p></note>
      </dd>

      <dt><code>SymLinksIfOwnerMatch</code></dt>

      <dd>The server will only follow symbolic links for which the
      target file or directory is owned by the same user id as the
      link.

      <note><title>Note</title>
      <p>The <code>FollowSymLinks</code> and
      <code>SymLinksIfOwnerMatch</code> <directive
      module="core">Options</directive> work only in <directive
      type="section" module="core">Directory</directive> sections or
      <code>.htaccess</code> files.</p>

      <p>This option should not be considered a security restriction,
      since symlink testing is subject to race conditions that make it
      circumventable.</p>
      </note> </dd>
    </dl>

    <p>Normally, if multiple <directive>Options</directive> could
    apply to a directory, then the most specific one is used and
    others are ignored; the options are not merged. (See <a
    href="../sections.html#merging">how sections are merged</a>.)
    However if <em>all</em> the options on the
    <directive>Options</directive> directive are preceded by a
    <code>+</code> or <code>-</code> symbol, the options are
    merged. Any options preceded by a <code>+</code> are added to the
    options currently in force, and any options preceded by a
    <code>-</code> are removed from the options currently in
    force. </p>

    <note><title>Note</title>
    <p>Mixing <directive>Options</directive> with a <code>+</code> or
    <code>-</code> with those without is not valid syntax and will be
    rejected during server startup by the syntax check with an abort.</p>
    </note>

    <p>For example, without any <code>+</code> and <code>-</code> symbols:</p>

    <highlight language="config">
&lt;Directory "/web/docs"&gt;
  Options Indexes FollowSymLinks
&lt;/Directory&gt;

&lt;Directory "/web/docs/spec"&gt;
  Options Includes
&lt;/Directory&gt;
    </highlight>

    <p>then only <code>Includes</code> will be set for the
    <code>/web/docs/spec</code> directory. However if the second
    <directive>Options</directive> directive uses the <code>+</code> and
    <code>-</code> symbols:</p>

    <highlight language="config">
&lt;Directory "/web/docs"&gt;
  Options Indexes FollowSymLinks
&lt;/Directory&gt;

&lt;Directory "/web/docs/spec"&gt;
  Options +Includes -Indexes
&lt;/Directory&gt;
    </highlight>

    <p>then the options <code>FollowSymLinks</code> and
    <code>Includes</code> are set for the <code>/web/docs/spec</code>
    directory.</p>

    <note><title>Note</title>
      <p>Using <code>-IncludesNOEXEC</code> or
      <code>-Includes</code> disables server-side includes completely
      regardless of the previous setting.</p>
    </note>

    <p>The default in the absence of any other settings is
    <code>FollowSymlinks</code>.</p>
</usage>
</directivesynopsis>

<directivesynopsis>
<name>Protocol</name>
<description>Protocol for a listening socket</description>
<syntax>Protocol <var>protocol</var></syntax>
<contextlist><context>server config</context><context>virtual host</context></contextlist>
<compatibility>On Windows, only available from Apache 2.3.3 and later.</compatibility>

<usage>
    <p>This directive specifies the protocol used for a specific listening socket.
       The protocol is used to determine which module should handle a request and
       to apply protocol specific optimizations with the <directive>AcceptFilter</directive>
       directive.</p>
 
    <p>This directive not required for most
       configurations. If not specified, <code>https</code> is the default for
       port 443 and <code>http</code> the default for all other ports.  The
       protocol is used to determine which module should handle a request, and
       to apply protocol specific optimizations with the
       <directive module="core">AcceptFilter</directive> directive.</p>

    <p>For example, if you are running <code>https</code> on a non-standard port,
       specify the protocol explicitly:</p>

    <highlight language="config">
Protocol https
    </highlight>

    <p>You can also specify the protocol using the <directive module="mpm_common">Listen</directive> directive.</p>
</usage>
<seealso><directive module="core">AcceptFilter</directive></seealso>
<seealso><directive module="mpm_common">Listen</directive></seealso>
</directivesynopsis>


<directivesynopsis>
    <name>Protocols</name>
    <description>Protocols available for a server/virtual host</description>
    <syntax>Protocols <var>protocol</var> ...</syntax>
    <default>Protocols http/1.1</default>
    <contextlist><context>server config</context><context>virtual host</context></contextlist>
    <compatibility>Only available from Apache 2.4.17 and later.</compatibility>
    
    <usage>
        <p>This directive specifies the list of protocols supported for a
            server/virtual host. The list determines the allowed protocols
            a client may negotiate for this server/host.</p>
        
        <p>You need to set protocols if you want to extend the available
            protocols for a server/host. By default, only the http/1.1 protocol
            (which includes the compatibility with 1.0 and 0.9 clients) is
            allowed.</p>
        
        <p>For example, if you want to support HTTP/2 for a server with TLS, 
            specify:</p>
        
        <highlight language="config">
Protocols h2 http/1.1
        </highlight>

        <p>Valid protocols are <code>http/1.1</code> for http and https connections,
            <code>h2</code> on https connections and <code>h2c</code> for http
            connections. Modules may enable more protocols.</p>
        
        <p>It is safe to specify protocols that are unavailable/disabled. Such
        protocol names will simply be ignored.</p>
        
        <p>Protocols specified in base servers are inherited for virtual hosts 
            only if the virtual host has no own Protocols directive. Or, the other
            way around, Protocols directives in virtual hosts replace any
            such directive in the base server.
        </p>

    </usage>
    <seealso><directive module="core">ProtocolsHonorOrder</directive></seealso>
</directivesynopsis>


<directivesynopsis>
    <name>ProtocolsHonorOrder</name>
    <description>Determines if order of Protocols determines precedence during negotiation</description>
    <syntax>ProtocolsHonorOrder On|Off</syntax>
    <default>ProtocolsHonorOrder On</default>
    <contextlist><context>server config</context><context>virtual host</context></contextlist>
    <compatibility>Only available from Apache 2.4.17 and later.</compatibility>
    
    <usage>
        <p>This directive specifies if the server should honor the order in which
        the <directive>Protocols</directive> directive lists protocols.</p>
        
        <p>If configured Off, the client supplied list order of protocols has 
            precedence over the order in the server configuration.</p>
        
        <p>With <directive>ProtocolsHonorOrder</directive> set to <code>on</code> 
            (default), the client ordering does not matter and only the ordering 
            in the server settings influences the outcome of the protocol 
            negotiation.</p>
        
    </usage>
    <seealso><directive module="core">Protocols</directive></seealso>
</directivesynopsis>


<directivesynopsis>
<name>ReadBufferSize</name>
<description>Size of the buffers used to read data</description>
<syntax>ReadBufferSize <var>bytes</var></syntax>
<default>ReadBufferSize 8192</default>
<contextlist><context>server config</context><context>virtual host</context>
<context>directory</context></contextlist>
<compatibility>2.5 and later</compatibility>

<usage>
    <p>This directive allows to configure the size (in bytes) of the memory
    buffer used to read data from the network or files.</p>

    <p>A larger buffer can increase peformances with larger data, but consumes
    more memory per connection. The minimum configurable size is
    <var>1024</var>.</p>
</usage>
</directivesynopsis>
 

<directivesynopsis>
    <name>RegexDefaultOptions</name>
    <description>Allow to configure global/default options for regexes</description>
    <syntax>RegexDefaultOptions [none] [+|-]<var>option</var> [[+|-]<var>option</var>] ...</syntax>
    <default>RegexDefaultOptions DOTALL DOLLAR_ENDONLY</default>
    <contextlist><context>server config</context></contextlist>
    <compatibility>Only available from Apache 2.4.30 and later.</compatibility>
    
    <usage>
        <p>This directive adds some default behavior to ANY regular expression
        used afterwards.</p>

        <p>Any option preceded by a '+' is added to the already set options.<br />
        Any option preceded by a '-' is removed from the already set options.<br />
        Any option without a '+' or a '-' will be set, removing any other
        already set option.<br />
        The <code>none</code> keyword resets any already set options.</p>

        <p><var>option</var> can be:</p>
        <dl>
            <dt><code>ICASE</code></dt>
            <dd>Use a case-insensitive match.</dd>

            <dt><code>EXTENDED</code></dt>
            <dd>Perl's /x flag, ignore (unescaped-)spaces and comments in the pattern.</dd>

            <dt><code>DOTALL</code></dt>
            <dd>Perl's /s flag, '.' matches newline characters.</dd>

            <dt><code>DOLLAR_ENDONLY</code></dt>
            <dd>'$' matches at end of subject string only.</dd>
        </dl>
        <highlight language="config">
# Reset all default/defined options
RegexDefaultOptions none
# Add the ICASE option for all regexes by default
RegexDefaultOptions +ICASE
...
# Add the ICASE option to the already applicable ones
RegexDefaultOptions +ICASE
# Remove the default DOLLAR_ENDONLY option, but keep any other one
RegexDefaultOptions -DOLLAR_ENDONLY
...
# Set the DOTALL option only, resetting any other one
RegexDefaultOptions DOTALL
...
# Set the DOTALL and ICASE options only
# Options are applied in order and blindly, so:
#   RegexDefaultOptions DOTALL ICASE
# would not work as possibly expected (ICASE clears DOTALL)
RegexDefaultOptions none +DOTALL +ICASE
# or "simply"
RegexDefaultOptions DOTALL +ICASE
...
        </highlight>
    </usage>
</directivesynopsis>


<directivesynopsis>
<name>RLimitCPU</name>
<description>Limits the CPU consumption of processes launched
by Apache httpd children</description>
<syntax>RLimitCPU <var>seconds</var>|max [<var>seconds</var>|max]</syntax>
<default>Unset; uses operating system defaults</default>
<contextlist><context>server config</context><context>virtual host</context>
<context>directory</context><context>.htaccess</context></contextlist>
<override>All</override>

<usage>
    <p>Takes 1 or 2 parameters. The first parameter sets the soft
    resource limit for all processes and the second parameter sets
    the maximum resource limit. Either parameter can be a number,
    or <code>max</code> to indicate to the server that the limit should
    be set to the maximum allowed by the operating system
    configuration. Raising the maximum resource limit requires that
    the server is running as <code>root</code> or in the initial startup
    phase.</p>

    <p>This applies to processes forked from Apache httpd children
    servicing requests, not the Apache httpd children themselves. This
    includes CGI scripts and SSI exec commands, but not any
    processes forked from the Apache httpd parent, such as piped
    logs.</p>

    <p>CPU resource limits are expressed in seconds per
    process.</p>
</usage>
<seealso><directive module="core">RLimitMEM</directive></seealso>
<seealso><directive module="core">RLimitNPROC</directive></seealso>
</directivesynopsis>

<directivesynopsis>
<name>RLimitMEM</name>
<description>Limits the memory consumption of processes launched
by Apache httpd children</description>
<syntax>RLimitMEM <var>bytes</var>|max [<var>bytes</var>|max]</syntax>
<default>Unset; uses operating system defaults</default>
<contextlist><context>server config</context><context>virtual host</context>
<context>directory</context><context>.htaccess</context></contextlist>
<override>All</override>

<usage>
    <p>Takes 1 or 2 parameters. The first parameter sets the soft
    resource limit for all processes and the second parameter sets
    the maximum resource limit. Either parameter can be a number,
    or <code>max</code> to indicate to the server that the limit should
    be set to the maximum allowed by the operating system
    configuration. Raising the maximum resource limit requires that
    the server is running as <code>root</code> or in the initial startup
    phase.</p>

    <p>This applies to processes forked from Apache httpd children
    servicing requests, not the Apache httpd children themselves. This
    includes CGI scripts and SSI exec commands, but not any
    processes forked from the Apache httpd parent, such as piped
    logs.</p>

    <p>Memory resource limits are expressed in bytes per
    process.</p>
</usage>
<seealso><directive module="core">RLimitCPU</directive></seealso>
<seealso><directive module="core">RLimitNPROC</directive></seealso>
</directivesynopsis>

<directivesynopsis>
<name>RLimitNPROC</name>
<description>Limits the number of processes that can be launched by
processes launched by Apache httpd children</description>
<syntax>RLimitNPROC <var>number</var>|max [<var>number</var>|max]</syntax>
<default>Unset; uses operating system defaults</default>
<contextlist><context>server config</context><context>virtual host</context>
<context>directory</context><context>.htaccess</context></contextlist>
<override>All</override>

<usage>
    <p>Takes 1 or 2 parameters. The first parameter sets the soft
    resource limit for all processes, and the second parameter sets
    the maximum resource limit. Either parameter can be a number,
    or <code>max</code> to indicate to the server that the limit
    should be set to the maximum allowed by the operating system
    configuration. Raising the maximum resource limit requires that
    the server is running as <code>root</code> or in the initial startup
    phase.</p>

    <p>This applies to processes forked from Apache httpd children
    servicing requests, not the Apache httpd children themselves. This
    includes CGI scripts and SSI exec commands, but not any
    processes forked from the Apache httpd parent, such as piped
    logs.</p>

    <p>Process limits control the number of processes per user.</p>

    <note><title>Note</title>
      <p>If CGI processes are <strong>not</strong> running
      under user ids other than the web server user id, this directive
      will limit the number of processes that the server itself can
      create. Evidence of this situation will be indicated by
      <strong><code>cannot fork</code></strong> messages in the
      <code>error_log</code>.</p>
    </note>
</usage>
<seealso><directive module="core">RLimitMEM</directive></seealso>
<seealso><directive module="core">RLimitCPU</directive></seealso>
</directivesynopsis>

<directivesynopsis>
<name>ScriptInterpreterSource</name>
<description>Technique for locating the interpreter for CGI
scripts</description>
<syntax>ScriptInterpreterSource Registry|Registry-Strict|Script</syntax>
<default>ScriptInterpreterSource Script</default>
<contextlist><context>server config</context><context>virtual host</context>
<context>directory</context><context>.htaccess</context></contextlist>
<override>FileInfo</override>
<compatibility>Win32 only.</compatibility>

<usage>
    <p>This directive is used to control how Apache httpd finds the
    interpreter used to run CGI scripts. The default setting is
    <code>Script</code>. This causes Apache httpd to use the interpreter pointed to
    by the shebang line (first line, starting with <code>#!</code>) in the
    script. On Win32 systems this line usually looks like:</p>

    <highlight language="perl">
#!C:/Perl/bin/perl.exe
    </highlight>

    <p>or, if <code>perl</code> is in the <code>PATH</code>, simply:</p>

    <highlight language="perl">
#!perl
    </highlight>

    <p>Setting <code>ScriptInterpreterSource Registry</code> will
    cause the Windows Registry tree <code>HKEY_CLASSES_ROOT</code> to be
    searched using the script file extension (e.g., <code>.pl</code>) as a
    search key. The command defined by the registry subkey
    <code>Shell\ExecCGI\Command</code> or, if it does not exist, by the subkey
    <code>Shell\Open\Command</code> is used to open the script file. If the
    registry keys cannot be found, Apache httpd falls back to the behavior of the
    <code>Script</code> option.</p>

    <note type="warning"><title>Security</title>
    <p>Be careful when using <code>ScriptInterpreterSource
    Registry</code> with <directive
    module="mod_alias">ScriptAlias</directive>'ed directories, because
    Apache httpd will try to execute <strong>every</strong> file within this
    directory. The <code>Registry</code> setting may cause undesired
    program calls on files which are typically not executed. For
    example, the default open command on <code>.htm</code> files on
    most Windows systems will execute Microsoft Internet Explorer, so
    any HTTP request for an <code>.htm</code> file existing within the
    script directory would start the browser in the background on the
    server. This is a good way to crash your system within a minute or
    so.</p>
    </note>

    <p>The option <code>Registry-Strict</code>
    does the same thing as <code>Registry</code> but uses only the
    subkey <code>Shell\ExecCGI\Command</code>. The
    <code>ExecCGI</code> key is not a common one. It must be
    configured manually in the windows registry and hence prevents
    accidental program calls on your system.</p>
</usage>
</directivesynopsis>

<directivesynopsis>
<name>SeeRequestTail</name>
<description>Determine if mod_status displays the first 63 characters
of a request or the last 63, assuming the request itself is greater than
63 chars.</description>
<syntax>SeeRequestTail On|Off</syntax>
<default>SeeRequestTail Off</default>
<contextlist><context>server config</context></contextlist>

<usage>
    <p><module>mod_status</module> with <code>ExtendedStatus On</code>
    displays the actual request being handled.
    For historical purposes, only 63 characters of the request
    are actually stored for display purposes. This directive
    controls whether the first 63 characters are stored (the previous
    behavior and the default) or if the last 63 characters are. This
    is only applicable, of course, if the length of the request is
    64 characters or greater.</p>

    <p>If Apache httpd is handling <code
    >GET&nbsp;/disk1/storage/apache/htdocs/images/imagestore1/food/apples.jpg&nbsp;HTTP/1.1</code
    > <module>mod_status</module> displays as follows:
    </p>

    <table border="1">
      <tr>
        <th>Off (default)</th>
        <td>GET&nbsp;/disk1/storage/apache/htdocs/images/imagestore1/food/apples</td>
      </tr>
      <tr>
        <th>On</th>
        <td>orage/apache/htdocs/images/imagestore1/food/apples.jpg&nbsp;HTTP/1.1</td>
      </tr>
    </table>

</usage>
</directivesynopsis>

<directivesynopsis>
<name>ServerAdmin</name>
<description>Email address that the server includes in error
messages sent to the client</description>
<syntax>ServerAdmin <var>email-address</var>|<var>URL</var></syntax>
<contextlist><context>server config</context><context>virtual host</context>
</contextlist>

<usage>
    <p>The <directive>ServerAdmin</directive> sets the contact address
    that the server includes in any error messages it returns to the
    client. If the <code>httpd</code> doesn't recognize the supplied argument
    as an URL, it
    assumes, that it's an <var>email-address</var> and prepends it with
    <code>mailto:</code> in hyperlink targets. However, it's recommended to
    actually use an email address, since there are a lot of CGI scripts that
    make that assumption. If you want to use an URL, it should point to another
    server under your control. Otherwise users may not be able to contact you in
    case of errors.</p>

    <p>It may be worth setting up a dedicated address for this, e.g.</p>

    <highlight language="config">
ServerAdmin www-admin@foo.example.com
    </highlight>
    <p>as users do not always mention that they are talking about the
    server!</p>
</usage>
</directivesynopsis>

<directivesynopsis>
<name>ServerAlias</name>
<description>Alternate names for a host used when matching requests
to name-virtual hosts</description>
<syntax>ServerAlias <var>hostname</var> [<var>hostname</var>] ...</syntax>
<contextlist><context>virtual host</context></contextlist>

<usage>
    <p>The <directive>ServerAlias</directive> directive sets the
    alternate names for a host, for use with <a
    href="../vhosts/name-based.html">name-based virtual hosts</a>. The
    <directive>ServerAlias</directive> may include wildcards, if appropriate.</p>

    <highlight language="config">
&lt;VirtualHost *:80&gt;
  ServerName server.example.com
  ServerAlias server server2.example.com server2
  ServerAlias *.example.com
  UseCanonicalName Off
  # ...
&lt;/VirtualHost&gt;
    </highlight>

    <p>Name-based virtual hosts for the best-matching set of  <directive
    type="section" module="core">virtualhost</directive>s are processed
    in the order they appear in the configuration.  The first matching <directive
    module="core">ServerName</directive> or <directive module="core"
    >ServerAlias</directive> is used, with no different precedence for wildcards
    (nor for ServerName vs. ServerAlias).  </p>

    <p>The complete list of names in the <directive type="section" module="core"
    >VirtualHost</directive>
    directive are treated just like a (non wildcard)
    <directive>ServerAlias</directive>.</p>

</usage>
<seealso><directive module="core">UseCanonicalName</directive></seealso>
<seealso><a href="../vhosts/">Apache HTTP Server Virtual Host documentation</a></seealso>
</directivesynopsis>

<directivesynopsis>
<name>ServerName</name>
<description>Hostname and port that the server uses to identify
itself</description>
<syntax>ServerName [<var>scheme</var>://]<var>domain-name</var>|<var>ip-address</var>[:<var>port</var>]</syntax>
<contextlist><context>server config</context><context>virtual host</context>
</contextlist>

<usage>
    <p>The <directive>ServerName</directive> directive sets the
    request scheme, hostname and port that the server uses to identify itself.
    </p>

    <p><directive>ServerName</directive> is used (possibly
    in conjunction with <directive module="core">ServerAlias</directive>) to uniquely
    identify a virtual host, when using <a
    href="../vhosts/name-based.html">name-based virtual hosts</a>.</p>

    <p>Additionally, this is used when
    creating self-referential redirection URLs when 
    <directive module="core">UseCanonicalName</directive> is set to a non-default
    value.</p>

    <p>For example, if the name of the
    machine hosting the web server is <code>simple.example.com</code>,
    but the machine also has the DNS alias <code>www.example.com</code>
    and you wish the web server to be so identified, the following
    directive should be used:</p>

    <highlight language="config">
ServerName www.example.com
    </highlight>

    <p>The <directive>ServerName</directive> directive
    may appear anywhere within the definition of a server. However,
    each appearance overrides the previous appearance (within that
    server).</p>

    <p>If no <directive>ServerName</directive> is specified, the
    server attempts to deduce the client visible hostname by first asking 
    the operating system for the system hostname, and if that fails, 
    performing a reverse lookup on an IP address present on the system.</p>

    <p>If no port is specified in the
    <directive>ServerName</directive>, then the server will use the
    port from the incoming request. For optimal reliability and
    predictability, you should specify an explicit hostname and port
    using the <directive>ServerName</directive> directive.</p>

    <p>If you are using <a
    href="../vhosts/name-based.html">name-based virtual hosts</a>,
    the <directive>ServerName</directive> inside a
    <directive type="section" module="core">VirtualHost</directive>
    section specifies what hostname must appear in the request's
    <code>Host:</code> header to match this virtual host.</p>

    <p>Sometimes, the server runs behind a device that processes SSL,
    such as a reverse proxy, load balancer or SSL offload
    appliance. When this is the case, specify the
    <code>https://</code> scheme and the port number to which the
    clients connect in the <directive>ServerName</directive> directive
    to make sure that the server generates the correct
    self-referential URLs.
    </p>

    <p>See the description of the
    <directive module="core">UseCanonicalName</directive> and
    <directive module="core">UseCanonicalPhysicalPort</directive> directives for
    settings which determine whether self-referential URLs (e.g., by the
    <module>mod_dir</module> module) will refer to the
    specified port, or to the port number given in the client's request.
    </p>

    <note type="warning">
    <p>Failure to set <directive>ServerName</directive> to a name that
    your server can resolve to an IP address will result in a startup
    warning. <code>httpd</code> will then use whatever hostname it can
    determine, using the system's <code>hostname</code> command. This
    will almost never be the hostname you actually want.</p>
    <example>
    httpd: Could not reliably determine the server's fully qualified domain name, using rocinante.local for ServerName
    </example>
    </note>

</usage>

<seealso><a href="../dns-caveats.html">Issues Regarding DNS and
    Apache HTTP Server</a></seealso>
<seealso><a href="../vhosts/">Apache HTTP Server virtual host
    documentation</a></seealso>
<seealso><directive module="core">UseCanonicalName</directive></seealso>
<seealso><directive module="core">UseCanonicalPhysicalPort</directive></seealso>
<seealso><directive module="core">ServerAlias</directive></seealso>
</directivesynopsis>

<directivesynopsis>
<name>ServerPath</name>
<description>Legacy URL pathname for a name-based virtual host that
is accessed by an incompatible browser</description>
<syntax>ServerPath <var>URL-path</var></syntax>
<contextlist><context>virtual host</context></contextlist>

<usage>
    <p>The <directive>ServerPath</directive> directive sets the legacy
    URL pathname for a host, for use with <a
    href="../vhosts/">name-based virtual hosts</a>.</p>
</usage>
<seealso><a href="../vhosts/">Apache HTTP Server Virtual Host documentation</a></seealso>
</directivesynopsis>

<directivesynopsis>
<name>ServerRoot</name>
<description>Base directory for the server installation</description>
<syntax>ServerRoot <var>directory-path</var></syntax>
<default>ServerRoot /usr/local/apache</default>
<contextlist><context>server config</context></contextlist>

<usage>
    <p>The <directive>ServerRoot</directive> directive sets the
    directory in which the server lives. Typically it will contain the
    subdirectories <code>conf/</code> and <code>logs/</code>. Relative
    paths in other configuration directives (such as <directive
    module="core">Include</directive> or <directive
    module="mod_so">LoadModule</directive>, for example) are taken as
    relative to this directory.</p>

    <highlight language="config">
ServerRoot "/home/httpd"
    </highlight>

    <p>The default location of <directive>ServerRoot</directive> may be
    modified by using the <code>--prefix</code> argument to
    <a href="../programs/configure.html"><code>configure</code></a>, and
    most third-party distributions of the server have a different
    default location from the one listed above.</p>

</usage>
<seealso><a href="../invoking.html">the <code>-d</code>
    option to <code>httpd</code></a></seealso>
<seealso><a href="../misc/security_tips.html#serverroot">the
    security tips</a> for information on how to properly set
    permissions on the <directive>ServerRoot</directive></seealso>
</directivesynopsis>

<directivesynopsis>
<name>ServerSignature</name>
<description>Configures the footer on server-generated documents</description>
<syntax>ServerSignature On|Off|EMail</syntax>
<default>ServerSignature Off</default>
<contextlist><context>server config</context><context>virtual host</context>
<context>directory</context><context>.htaccess</context>
</contextlist>
<override>All</override>

<usage>
    <p>The <directive>ServerSignature</directive> directive allows the
    configuration of a trailing footer line under server-generated
    documents (error messages, <module>mod_proxy</module> ftp directory
    listings, <module>mod_info</module> output, ...). The reason why you
    would want to enable such a footer line is that in a chain of proxies,
    the user often has no possibility to tell which of the chained servers
    actually produced a returned error message.</p>

    <p>The <code>Off</code>
    setting, which is the default, suppresses the footer line.
    The <code>On</code> setting simply adds a line with the
    server version number and <directive
    module="core">ServerName</directive> of the serving virtual host,
    and the <code>EMail</code> setting additionally creates a
    "mailto:" reference to the <directive
    module="core">ServerAdmin</directive> of the referenced
    document.</p>

    <p>The details of the server version number
    presented are controlled by the <directive
    module="core">ServerTokens</directive> directive.</p>
</usage>
<seealso><directive module="core">ServerTokens</directive></seealso>
</directivesynopsis>

<directivesynopsis>
<name>ServerTokens</name>
<description>Configures the <code>Server</code> HTTP response
header</description>
<syntax>ServerTokens Major|Minor|Min[imal]|Prod[uctOnly]|OS|Full</syntax>
<default>ServerTokens Full</default>
<contextlist><context>server config</context></contextlist>

<usage>
    <p>This directive controls whether <code>Server</code> response
    header field which is sent back to clients includes a
    description of the generic OS-type of the server as well as
    information about compiled-in modules.</p>

    <dl>
      <dt><code>ServerTokens Full</code> (or not specified)</dt>

      <dd>Server sends (<em>e.g.</em>): <code>Server: Apache/2.4.2
      (Unix) PHP/4.2.2 MyMod/1.2</code></dd>

      <dt><code>ServerTokens Prod[uctOnly]</code></dt>

      <dd>Server sends (<em>e.g.</em>): <code>Server:
      Apache</code></dd>

      <dt><code>ServerTokens Major</code></dt>

      <dd>Server sends (<em>e.g.</em>): <code>Server:
      Apache/2</code></dd>

      <dt><code>ServerTokens Minor</code></dt>

      <dd>Server sends (<em>e.g.</em>): <code>Server:
      Apache/2.4</code></dd>

      <dt><code>ServerTokens Min[imal]</code></dt>

      <dd>Server sends (<em>e.g.</em>): <code>Server:
      Apache/2.4.2</code></dd>

      <dt><code>ServerTokens OS</code></dt>

      <dd>Server sends (<em>e.g.</em>): <code>Server: Apache/2.4.2
      (Unix)</code></dd>

    </dl>

    <p>This setting applies to the entire server, and cannot be
    enabled or disabled on a virtualhost-by-virtualhost basis.</p>

    <p>This directive also controls the
    information presented by the <directive
    module="core">ServerSignature</directive> directive.</p>

    <note>Setting <directive>ServerTokens</directive> to less than
    <code>minimal</code> is not recommended because it makes it more
    difficult to debug interoperational problems. Also note that
    disabling the Server: header does nothing at all to make your
    server more secure. The idea of "security through obscurity"
    is a myth and leads to a false sense of safety.</note>
</usage>
<seealso><directive module="core">ServerSignature</directive></seealso>
</directivesynopsis>

<directivesynopsis>
<name>SetHandler</name>
<description>Forces all matching files to be processed by a
handler</description>
<syntax>SetHandler <var>handler-name</var>|none|<var>expression</var></syntax>
<contextlist><context>server config</context><context>virtual host</context>
<context>directory</context><context>.htaccess</context>
</contextlist>
<override>FileInfo</override>
<compatibility>2.5 and later</compatibility>

<usage>
    <p>When placed into an <code>.htaccess</code> file or a
    <directive type="section" module="core">Directory</directive> or
    <directive type="section" module="core">Location</directive>
    section, this directive forces all matching files to be parsed
    through the <a href="../handler.html">handler</a> given by
    <var>handler-name</var>. For example, if you had a directory you
    wanted to be parsed entirely as imagemap rule files, regardless
    of extension, you might put the following into an
    <code>.htaccess</code> file in that directory:</p>

    <highlight language="config">
SetHandler imap-file
    </highlight>

    <p>Another example: if you wanted to have the server display a
    status report whenever a URL of
    <code>http://servername/status</code> was called, you might put
    the following into <code>httpd.conf</code>:</p>

    <highlight language="config">
&lt;Location "/status"&gt;
  SetHandler server-status
&lt;/Location&gt;
    </highlight>

    <p>You could also use this directive to configure a particular
    handler for files with a particular file extension. For example:</p>

    <highlight language="config">
&lt;FilesMatch "\.php$"&gt;
    SetHandler application/x-httpd-php
&lt;/FilesMatch&gt;
    </highlight>

    <p>String-valued expressions can be used to reference per-request 
    variables, including backreferences to named regular expressions:</p>

    <highlight language="config">
&lt;LocationMatch ^/app/(?&lt;sub&gt;[^/]+)/&gt;
     SetHandler "proxy:unix:/var/run/app_%{env:MATCH_sub}.sock|fcgi://localhost:8080"
&lt;/LocationMatch&gt;
    </highlight>

    <p>You can override an earlier defined <directive>SetHandler</directive>
    directive by using the value <code>None</code>.</p>

    <note><title>Note</title>
    <p>Because <directive>SetHandler</directive> overrides default handlers,
    normal behavior such as handling of URLs ending in a slash (/) as
    directories or index files is suppressed.</p></note>
</usage>

<seealso><directive module="mod_mime">AddHandler</directive></seealso>

</directivesynopsis>

<directivesynopsis>
<name>SetInputFilter</name>
<description>Sets the filters that will process client requests and POST
input</description>
<syntax>SetInputFilter <var>filter</var>[;<var>filter</var>...]</syntax>
<contextlist><context>server config</context><context>virtual host</context>
<context>directory</context><context>.htaccess</context>
</contextlist>
<override>FileInfo</override>

<usage>
    <p>The <directive>SetInputFilter</directive> directive sets the
    filter or filters which will process client requests and POST
    input when they are received by the server. This is in addition to
    any filters defined elsewhere, including the
    <directive module="mod_mime">AddInputFilter</directive>
    directive.</p>

    <p>If more than one filter is specified, they must be separated
    by semicolons in the order in which they should process the
    content.</p>
</usage>
<seealso><a href="../filter.html">Filters</a> documentation</seealso>
</directivesynopsis>

<directivesynopsis>
<name>SetOutputFilter</name>
<description>Sets the filters that will process responses from the
server</description>
<syntax>SetOutputFilter <var>filter</var>[;<var>filter</var>...]</syntax>
<contextlist><context>server config</context><context>virtual host</context>
<context>directory</context><context>.htaccess</context>
</contextlist>
<override>FileInfo</override>

<usage>
    <p>The <directive>SetOutputFilter</directive> directive sets the filters
    which will process responses from the server before they are
    sent to the client. This is in addition to any filters defined
    elsewhere, including the
    <directive module="mod_mime">AddOutputFilter</directive>
    directive.</p>

    <p>For example, the following configuration will process all files
    in the <code>/www/data/</code> directory for server-side
    includes.</p>

    <highlight language="config">
&lt;Directory "/www/data/"&gt;
  SetOutputFilter INCLUDES
&lt;/Directory&gt;
    </highlight>

    <p>If more than one filter is specified, they must be separated
    by semicolons in the order in which they should process the
    content.</p>
</usage>
<seealso><a href="../filter.html">Filters</a> documentation</seealso>
</directivesynopsis>

<directivesynopsis>
<name>TimeOut</name>
<description>Amount of time the server will wait for
certain events before failing a request</description>
<syntax>TimeOut <var>time-interval</var>[s]</syntax>
<default>TimeOut 60</default>
<contextlist><context>server config</context><context>virtual host</context></contextlist>

<usage>
    <p>The <directive>TimeOut</directive> directive defines the length
    of time Apache httpd will wait for I/O in various circumstances:</p>

    <ul>
      <li><p>When reading data from the client, the length of time to
      wait for a TCP packet to arrive if the read buffer is
      empty.</p>
      <p> For initial data on a new connection, this directive doesn't
      take effect until after any configured <directive module="core">
      AcceptFilter</directive> has passed the new connection to the server.</p>
      </li>

      <li>When writing data to the client, the length of time to wait
      for an acknowledgement of a packet if the send buffer is
      full.</li>

      <li>In <module>mod_cgi</module> and <module>mod_cgid</module>,
      the length of time to wait for any individual block of output
      from a CGI script.</li>

      <li>In <module>mod_ext_filter</module>, the length of time to
      wait for output from a filtering process.</li>

      <li>In <module>mod_proxy</module>, the default timeout value if
      <directive module="mod_proxy">ProxyTimeout</directive> is not
      configured.</li>
    </ul>

</usage>
</directivesynopsis>

<directivesynopsis>
<name>TraceEnable</name>
<description>Determines the behavior on <code>TRACE</code> requests</description>
<syntax>TraceEnable <var>[on|off|extended]</var></syntax>
<default>TraceEnable on</default>
<contextlist><context>server config</context><context>virtual host</context></contextlist>

<usage>
    <p>This directive overrides the behavior of <code>TRACE</code> for both
    the core server and <module>mod_proxy</module>.  The default
    <code>TraceEnable on</code> permits <code>TRACE</code> requests per
    RFC 2616, which disallows any request body to accompany the request.
    <code>TraceEnable off</code> causes the core server and
    <module>mod_proxy</module> to return a <code>405</code> (Method not
    allowed) error to the client.</p>

    <p>Finally, for testing and diagnostic purposes only, request
    bodies may be allowed using the non-compliant <code>TraceEnable
    extended</code> directive.  The core (as an origin server) will
    restrict the request body to 64Kb (plus 8Kb for chunk headers if
    <code>Transfer-Encoding: chunked</code> is used).  The core will
    reflect the full headers and all chunk headers with the response
    body.  As a proxy server, the request body is not restricted to 64Kb.</p>

    <note><title>Note</title>

    <p>Despite claims to the contrary, enabling the <code>TRACE</code>
    method does not expose any security vulnerability in Apache httpd.
    The <code>TRACE</code> method is defined by the HTTP/1.1
    specification and implementations are expected to support it.</p>
    
    </note>
</usage>
</directivesynopsis>

<directivesynopsis>
<name>UnDefine</name>
<description>Undefine the existence of a variable</description>
<syntax>UnDefine <var>parameter-name</var></syntax>
<contextlist><context>server config</context>
<context>virtual host</context></contextlist>

<usage>
    <p>Undoes the effect of a <directive module="core">Define</directive> or
    of passing a <code>-D</code> argument to <program>httpd</program>.</p>
    <p>This directive can be used to toggle the use of <directive module="core"
    type="section">IfDefine</directive> sections without needing to alter
    <code>-D</code> arguments in any startup scripts.</p>

    <p>Variable names may not contain colon ":" characters, to avoid clashes
    with <directive module="mod_rewrite">RewriteMap</directive>'s syntax.</p>

    <note><title>Virtual Host scope and pitfalls</title>
      <p>While this directive is supported in virtual host context,
         the changes it makes are visible to any later configuration
         directives, beyond any enclosing virtual host.</p>
    </note>
</usage>
<seealso><directive module="core">Define</directive></seealso>
<seealso><directive module="core">IfDefine</directive></seealso>
</directivesynopsis>

<directivesynopsis>
<name>UseCanonicalName</name>
<description>Configures how the server determines its own name and
port</description>
<syntax>UseCanonicalName On|Off|DNS</syntax>
<default>UseCanonicalName Off</default>
<contextlist><context>server config</context><context>virtual host</context>
<context>directory</context></contextlist>

<usage>
    <p>In many situations Apache httpd must construct a <em>self-referential</em>
    URL -- that is, a URL that refers back to the same server. With
    <code>UseCanonicalName On</code> Apache httpd will use the hostname and port
    specified in the <directive module="core">ServerName</directive>
    directive to construct the canonical name for the server. This name
    is used in all self-referential URLs, and for the values of
    <code>SERVER_NAME</code> and <code>SERVER_PORT</code> in CGIs.</p>

    <p>With <code>UseCanonicalName Off</code> Apache httpd will form
    self-referential URLs using the hostname and port supplied by
    the client if any are supplied (otherwise it will use the
    canonical name, as defined above). These values are the same
    that are used to implement <a
    href="../vhosts/name-based.html">name-based virtual hosts</a>
    and are available with the same clients. The CGI variables
    <code>SERVER_NAME</code> and <code>SERVER_PORT</code> will be
    constructed from the client supplied values as well.</p>

    <p>An example where this may be useful is on an intranet server
    where you have users connecting to the machine using short
    names such as <code>www</code>. You'll notice that if the users
    type a shortname and a URL which is a directory, such as
    <code>http://www/splat</code>, <em>without the trailing
    slash</em>, then Apache httpd will redirect them to
    <code>http://www.example.com/splat/</code>. If you have
    authentication enabled, this will cause the user to have to
    authenticate twice (once for <code>www</code> and once again
    for <code>www.example.com</code> -- see <a
    href="http://wiki.apache.org/httpd/FAQ#Why_does_Apache_ask_for_my_password_twice_before_serving_a_file.3F">
    the FAQ on this subject for more information</a>). But if
    <directive>UseCanonicalName</directive> is set <code>Off</code>, then
    Apache httpd will redirect to <code>http://www/splat/</code>.</p>

    <p>There is a third option, <code>UseCanonicalName DNS</code>,
    which is intended for use with mass IP-based virtual hosting to
    support ancient clients that do not provide a
    <code>Host:</code> header. With this option, Apache httpd does a
    reverse DNS lookup on the server IP address that the client
    connected to in order to work out self-referential URLs.</p>

    <note type="warning"><title>Warning</title>
    <p>If CGIs make assumptions about the values of <code>SERVER_NAME</code>,
    they may be broken by this option. The client is essentially free
    to give whatever value they want as a hostname. But if the CGI is
    only using <code>SERVER_NAME</code> to construct self-referential URLs,
    then it should be just fine.</p>
    </note>
</usage>
<seealso><directive module="core">UseCanonicalPhysicalPort</directive></seealso>
<seealso><directive module="core">ServerName</directive></seealso>
<seealso><directive module="mpm_common">Listen</directive></seealso>
</directivesynopsis>

<directivesynopsis>
<name>UseCanonicalPhysicalPort</name>
<description>Configures how the server determines its own port</description>
<syntax>UseCanonicalPhysicalPort On|Off</syntax>
<default>UseCanonicalPhysicalPort Off</default>
<contextlist><context>server config</context><context>virtual host</context>
<context>directory</context></contextlist>

<usage>
    <p>In many situations Apache httpd must construct a <em>self-referential</em>
    URL -- that is, a URL that refers back to the same server. With
    <code>UseCanonicalPhysicalPort On</code>, Apache httpd will, when
    constructing the canonical port for the server to honor
    the <directive module="core">UseCanonicalName</directive> directive,
    provide the actual physical port number being used by this request
    as a potential port. With <code>UseCanonicalPhysicalPort Off</code>,
    Apache httpd will not ever use the actual physical port number, instead
    relying on all configured information to construct a valid port number.</p>

    <note><title>Note</title>
    <p>The ordering of the lookup when the physical port is used is as
    follows:</p>
     <dl>
     <dt><code>UseCanonicalName Off | DNS</code></dt>
     <dd>
     <ol>
      <li>Parsed port from <code>Host:</code> header</li>
      <li>Physical port (only with <directive>UseCanonicalPhysicalPort</directive> ON)</li>
      <li>Port provided in <directive module="core">Servername</directive></li>
      <li>Default port</li>
     </ol>
     </dd>
     <dt><code>UseCanonicalName On</code></dt>
     <dd>
     <ol>
      <li>Port provided in <directive module="core">Servername</directive></li>
      <li>Physical port (only with <directive>UseCanonicalPhysicalPort</directive> ON)</li>
      <li>Default port</li>
     </ol>
     </dd>
    </dl>

    <p>Only with <code>UseCanonicalPhysicalPort On</code>, the
    physical ports are included in the search.</p>
    </note>

</usage>
<seealso><directive module="core">UseCanonicalName</directive></seealso>
<seealso><directive module="core">ServerName</directive></seealso>
<seealso><directive module="mpm_common">Listen</directive></seealso>
</directivesynopsis>

<directivesynopsis type="section">
<name>VirtualHost</name>
<description>Contains directives that apply only to a specific
hostname or IP address</description>
<syntax>&lt;VirtualHost
    <var>addr</var>[:<var>port</var>] [<var>addr</var>[:<var>port</var>]]
    ...&gt; ... &lt;/VirtualHost&gt;</syntax>
<contextlist><context>server config</context></contextlist>

<usage>
    <p><directive type="section">VirtualHost</directive> and
    <code>&lt;/VirtualHost&gt;</code> are used to enclose a group of
    directives that will apply only to a particular virtual host. Any
    directive that is allowed in a virtual host context may be
    used. When the server receives a request for a document on a
    particular virtual host, it uses the configuration directives
    enclosed in the <directive type="section">VirtualHost</directive>
    section. <var>Addr</var> can be any of the following, optionally followed by
    a colon and a port number (or *):</p>

    <ul>
      <li>The IP address of the virtual host;</li>

      <li>A fully qualified domain name for the IP address of the
      virtual host (not recommended);</li>

      <li>The character <code>*</code>, which acts as a wildcard and matches
      any IP address.</li>

      <li>The string <code>_default_</code>, which is an alias for <code>*</code></li>

    </ul>

    <highlight language="config">
&lt;VirtualHost 10.1.2.3:80&gt;
  ServerAdmin webmaster@host.example.com
  DocumentRoot "/www/docs/host.example.com"
  ServerName host.example.com
  ErrorLog "logs/host.example.com-error_log"
  TransferLog "logs/host.example.com-access_log"
&lt;/VirtualHost&gt;
    </highlight>


    <p>IPv6 addresses must be specified in square brackets because
    the optional port number could not be determined otherwise.  An
    IPv6 example is shown below:</p>

    <highlight language="config">
&lt;VirtualHost [2001:db8::a00:20ff:fea7:ccea]:80&gt;
  ServerAdmin webmaster@host.example.com
  DocumentRoot "/www/docs/host.example.com"
  ServerName host.example.com
  ErrorLog "logs/host.example.com-error_log"
  TransferLog "logs/host.example.com-access_log"
&lt;/VirtualHost&gt;
    </highlight>

    <p>Each Virtual Host must correspond to a different IP address,
    different port number, or a different host name for the server,
    in the former case the server machine must be configured to
    accept IP packets for multiple addresses. (If the machine does
    not have multiple network interfaces, then this can be
    accomplished with the <code>ifconfig alias</code> command -- if
    your OS supports it).</p>

    <note><title>Note</title>
    <p>The use of <directive type="section">VirtualHost</directive> does
    <strong>not</strong> affect what addresses Apache httpd listens on. You
    may need to ensure that Apache httpd is listening on the correct addresses
    using <directive module="mpm_common">Listen</directive>.</p>
    </note>

    <p>A <directive module="core">ServerName</directive> should be
    specified inside each <directive
    type="section">VirtualHost</directive> block. If it is absent, the
    <directive module="core">ServerName</directive> from the "main"
    server configuration will be inherited.</p>

    <p>When a request is received, the server first maps it to the best matching
    <directive type="section">VirtualHost</directive> based on the local
    IP address and port combination only.  Non-wildcards have a higher
    precedence. If no match based on IP and port occurs at all, the
    "main" server configuration is used.</p>

    <p>If multiple virtual hosts contain the best matching IP address and port,
    the server selects from these virtual hosts the best match based on the
    requested hostname.  If no matching name-based virtual host is found,
    then the first listed virtual host that matched the IP address will be
    used.  As a consequence, the first listed virtual host for a given IP address
    and port combination is the default virtual host for that IP and port
    combination.</p>

    <note type="warning"><title>Security</title>
    <p>See the <a href="../misc/security_tips.html">security tips</a>
    document for details on why your security could be compromised if the
    directory where log files are stored is writable by anyone other
    than the user that starts the server.</p>
    </note>
</usage>
<seealso><a href="../vhosts/">Apache HTTP Server Virtual Host documentation</a></seealso>
<seealso><a href="../dns-caveats.html">Issues Regarding DNS and
    Apache HTTP Server</a></seealso>
<seealso><a href="../bind.html">Setting
    which addresses and ports Apache HTTP Server uses</a></seealso>
<seealso><a href="../sections.html">How &lt;Directory&gt;, &lt;Location&gt;
    and &lt;Files&gt; sections work</a> for an explanation of how these
    different sections are combined when a request is received</seealso>
</directivesynopsis>

<directivesynopsis>
<name>RegisterHttpMethod</name>
<description>Register non-standard HTTP methods</description>
<syntax>RegisterHttpMethod <var>method</var> [<var>method</var> [...]]</syntax>
<contextlist><context>server config</context></contextlist>
<compatibility>Available in Apache HTTP Server 2.4.24 and later</compatibility>

<usage>
<p>This directive may be used to register additional HTTP methods.  This is
necessary if non-standard methods need to be used with directives that accept 
method names as parameters, or to allow particular non-standard methods to be 
used via proxy or CGI script when the server has been configured to only pass 
recognized methods to modules.</p>
</usage>
<seealso><directive module="core">HTTPProtocolOptions</directive></seealso>
<seealso><directive module="mod_allowmethods">AllowMethods</directive></seealso>
</directivesynopsis>

<directivesynopsis>
<name>Warning</name>
<description>Warn from configuration parsing with a custom message</description>
<syntax>Warning <var>message</var></syntax>
<contextlist><context>server config</context><context>virtual host</context>
<context>directory</context><context>.htaccess</context>
</contextlist>
<override>All</override>
<compatibility>2.5 and later</compatibility>

<usage>
    <p>If an issue can be detected from within the configuration, this
    directive can be used to generate a custom warning message. The
    configuration parsing is not halted. The typical use is to check
    whether some user define options are set, and warn if not.</p>

    <highlight language="config">
# Example
# tell when ReverseProxy is not set
&lt;IfDefine !ReverseProxy&gt;
  Warning "reverse proxy is not started, hope this is okay!"
&lt;/IfDefine&gt;

&lt;IfDefine ReverseProxy&gt;
  # define custom proxy configuration
&lt;/IfDefine&gt;
    </highlight>

    <note type="warning"><title>Note</title>
        <p> This directive is evaluated at configuration processing time,
        not at runtime. As a result, this directive cannot be conditonally
        evaluated by enclosing it in an <directive type="section" module="core"
        >If</directive> section.</p>
    </note>
</usage>
</directivesynopsis>

<directivesynopsis>
<name>MergeTrailers</name>
<description>Determines whether trailers are merged into headers</description>
<syntax>MergeTrailers [on|off]</syntax>
<default>MergeTrailers off</default>
<contextlist><context>server config</context><context>virtual host</context></contextlist>
<compatibility>2.4.11 and later</compatibility>

<usage>
    <p>This directive controls whether HTTP trailers are copied into the
    internal representation of HTTP headers. This merging occurs when the
    request body has been completely consumed, long after most header
    processing would have a chance to examine or modify request headers.</p>
    <p>This option is provided for compatibility with releases prior to 2.4.11,
    where trailers were always merged.</p>
</usage>
</directivesynopsis>

<directivesynopsis>
<name>QualifyRedirectURL</name>
<description>Controls whether the REDIRECT_URL environment variable is
             fully qualified</description>
<syntax>QualifyRedirectURL On|Off</syntax>
<default>QualifyRedirectURL Off</default>
<contextlist><context>server config</context><context>virtual host</context>
<context>directory</context>
</contextlist>
<override>FileInfo</override>
<compatibility>Directive supported in 2.4.18 and later. 2.4.17 acted
as if 'QualifyRedirectURL On' was configured.</compatibility>

<usage>
    <p>This directive controls whether the server will ensure that the 
    REDIRECT_URL environment variable is fully qualified.  By default, 
    the variable contains the verbatim URL requested by the client, 
    such as "/index.html".  With <directive
    >QualifyRedirectURL On</directive>, the same request would result in a
    value such as "http://www.example.com/index.html".</p>
    <p>Even without this directive set, when a request is issued against a 
    fully qualified URL, REDIRECT_URL will remain fully qualified.
    </p>
</usage>
</directivesynopsis>

<directivesynopsis>
<name>StrictHostCheck</name>
<description>Controls whether the server requires the requested hostname be
             listed enumerated in the virtual host handling the request
             </description>
<syntax>StrictHostCheck ON|OFF</syntax>
<default>StrictHostCheck OFF</default>
<contextlist><context>server config</context><context>virtual host</context>
</contextlist>
<compatibility>Added in 2.5.1</compatibility>

<usage>
    <p>By default, the server will respond to requests for any hostname,
    including requests addressed to unexpected or unconfigured hostnames. 
    While this is convenient, it is sometimes desirable to limit what hostnames
    a backend application handles since it will often generate self-referential
    responses.</p>

    <p>By setting <directive>StrictHostCheck</directive> to <em>ON</em>,
    the server will return an HTTP 400 error if the requested hostname
    hasn't been explicitly listed by either <directive module="core"
    >ServerName</directive> or <directive module="core"
    >ServerAlias</directive> in the virtual host that best matches the
    details of the incoming connection.</p>

   <p>This directive also allows matching of the requested hostname to hostnames
   specified within the opening <directive module="core">VirtualHost</directive>
   tag, which is a relatively obscure configuration mechanism that acts like
   additional <directive module="core">ServerAlias</directive> entries.</p>

   <p>This directive has no affect in non-default virtual hosts. The value
   inherited from the global server configuration, or the default virtualhost 
   for the ip:port the underlying connection, determine the effective value.</p>
</usage>
</directivesynopsis>

<directivesynopsis>
<name>MergeSlashes</name>
<description>Controls whether the server merges consecutive slashes in URLs.
</description>
<syntax>MergeSlashes ON|OFF</syntax>
<default>MergeSlashes ON</default>
<contextlist><context>server config</context><context>virtual host</context>
</contextlist>
<compatibility>Added in 2.5.1</compatibility>

<usage>
    <p>By default, the server merges (or collapses) multiple consecutive slash
    ('/') characters in the path component of the request URL.</p>

    <p>When mapping URL's to the filesystem, these multiple slashes are not 
    significant.  However, URL's handled other ways, such as by CGI or proxy,
    might prefer to retain the significance of multiple consecutive slashes. 
    In these cases <directive>MergeSlashes</directive> can be set to 
    <em>OFF</em> to retain the multiple consecutive slashes, which is the legacy behavior.</p>
    <p>
    When set to "OFF", regular expressions used in the configuration file that match
    the path component of the URL (<directive>LocationMatch</directive>,
    <directive>RewriteRule</directive>, ...) need to take into account multiple 
    consecutive slashes. Non regular expression based <directive>Location</directive> always
    operate against a URL with merged slashes and cannot differentiate between multiple slashes.</p>
</usage>
</directivesynopsis>

</modulesynopsis>
