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

<link href="../images/favicon.ico" rel="shortcut icon" /></head>
<body>
<div id="page-header">
<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/quickreference.html">Directives</a> | <a href="http://wiki.apache.org/httpd/FAQ">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p>
<p class="apache">Apache HTTP Server Version 2.5</p>
<img alt="" src="../images/feather.png" /></div>
<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
<div id="path">
<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs/">Documentation</a> &gt; <a href="../">Version 2.5</a> &gt; <a href="./">Modules</a></div>
<div id="page-content">
<div id="preamble"><h1>Apache Module mod_autoindex</h1>
<div class="toplang">
<p><span>Available Languages: </span><a href="../en/mod/mod_autoindex.html" title="English">&nbsp;en&nbsp;</a> |
<a href="../fr/mod/mod_autoindex.html" hreflang="fr" rel="alternate" title="Français">&nbsp;fr&nbsp;</a> |
<a href="../ja/mod/mod_autoindex.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
<a href="../ko/mod/mod_autoindex.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a> |
<a href="../tr/mod/mod_autoindex.html" hreflang="tr" rel="alternate" title="Türkçe">&nbsp;tr&nbsp;</a></p>
</div>
<table class="module"><tr><th><a href="module-dict.html#Description">Description:</a></th><td>Generates directory indexes,
    automatically, similar to the Unix <code>ls</code> command or the
    Win32 <code>dir</code> shell command</td></tr>
<tr><th><a href="module-dict.html#Status">Status:</a></th><td>Base</td></tr>
<tr><th><a href="module-dict.html#ModuleIdentifier">Module Identifier:</a></th><td>autoindex_module</td></tr>
<tr><th><a href="module-dict.html#SourceFile">Source File:</a></th><td>mod_autoindex.c</td></tr></table>
<h3>Summary</h3>

      <p>The index of a directory can come from one of two
      sources:</p>

    <ul>
      <li>A file located in that directory, typically called
      <code>index.html</code>. The <code class="directive"><a href="../mod/mod_dir.html#directoryindex">DirectoryIndex</a></code> directive sets the
      name of the file or files to be used. This is controlled by
      <code class="module"><a href="../mod/mod_dir.html">mod_dir</a></code>.</li>

      <li>Otherwise, a listing generated by the server. The other
      directives control the format of this listing. The <code class="directive"><a href="#addicon">AddIcon</a></code>, <code class="directive"><a href="#addiconbyencoding">AddIconByEncoding</a></code> and
      <code class="directive"><a href="#addiconbytype">AddIconByType</a></code> are
      used to set a list of icons to display for various file types;
      for each file listed, the first icon listed that matches the
      file is displayed. These are controlled by
      <code class="module"><a href="../mod/mod_autoindex.html">mod_autoindex</a></code>.</li>
    </ul>
    <p>The two functions are separated so that you can completely
    remove (or replace) automatic index generation should you want
    to.</p>

    <p>Automatic index generation is enabled with using
    <code>Options +Indexes</code>. See the
    <code class="directive"><a href="../mod/core.html#options">Options</a></code> directive for
    more details.</p>

    <p>If the <code><a href="#indexoptions.fancyindexing">FancyIndexing</a></code> option is given with the <code class="directive"><a href="#indexoptions">IndexOptions</a></code> directive,
    the column headers are links that control the order of the
    display. If you select a header link, the listing will be
    regenerated, sorted by the values in that column. Selecting the
    same header repeatedly toggles between ascending and descending
    order. These column header links are suppressed with the
    <code class="directive"><a href="#indexoptions">IndexOptions</a></code> directive's
    <code><a href="#indexoptions.suppresscolumnsorting">SuppressColumnSorting</a></code>
    option.</p>

    <p>Note that when the display is sorted by "Size", it's the
    <em>actual</em> size of the files that's used, not the
    displayed value - so a 1010-byte file will always be displayed
    before a 1011-byte file (if in ascending order) even though
    they both are shown as "1K".</p>
</div>
<div id="quickview"><h3>Topics</h3>
<ul id="topics">
<li><img alt="" src="../images/down.gif" /> <a href="#query">Autoindex Request Query Arguments</a></li>
</ul><h3 class="directives">Directives</h3>
<ul id="toc">
<li><img alt="" src="../images/down.gif" /> <a href="#addalt">AddAlt</a></li>
<li><img alt="" src="../images/down.gif" /> <a href="#addaltbyencoding">AddAltByEncoding</a></li>
<li><img alt="" src="../images/down.gif" /> <a href="#addaltbytype">AddAltByType</a></li>
<li><img alt="" src="../images/down.gif" /> <a href="#adddescription">AddDescription</a></li>
<li><img alt="" src="../images/down.gif" /> <a href="#addicon">AddIcon</a></li>
<li><img alt="" src="../images/down.gif" /> <a href="#addiconbyencoding">AddIconByEncoding</a></li>
<li><img alt="" src="../images/down.gif" /> <a href="#addiconbytype">AddIconByType</a></li>
<li><img alt="" src="../images/down.gif" /> <a href="#defaulticon">DefaultIcon</a></li>
<li><img alt="" src="../images/down.gif" /> <a href="#headername">HeaderName</a></li>
<li><img alt="" src="../images/down.gif" /> <a href="#indexforbiddenreturn404">IndexForbiddenReturn404</a></li>
<li><img alt="" src="../images/down.gif" /> <a href="#indexheadinsert">IndexHeadInsert</a></li>
<li><img alt="" src="../images/down.gif" /> <a href="#indexignore">IndexIgnore</a></li>
<li><img alt="" src="../images/down.gif" /> <a href="#indexignorereset">IndexIgnoreReset</a></li>
<li><img alt="" src="../images/down.gif" /> <a href="#indexoptions">IndexOptions</a></li>
<li><img alt="" src="../images/down.gif" /> <a href="#indexorderdefault">IndexOrderDefault</a></li>
<li><img alt="" src="../images/down.gif" /> <a href="#indexstylesheet">IndexStyleSheet</a></li>
<li><img alt="" src="../images/down.gif" /> <a href="#readmename">ReadmeName</a></li>
</ul>
<h3>Bugfix checklist</h3><ul class="seealso"><li><a href="https://www.apache.org/dist/httpd/CHANGES_2.4">httpd changelog</a></li><li><a href="https://bz.apache.org/bugzilla/buglist.cgi?bug_status=__open__&amp;list_id=144532&amp;product=Apache%20httpd-2&amp;query_format=specific&amp;order=changeddate%20DESC%2Cpriority%2Cbug_severity&amp;component=mod_autoindex">Known issues</a></li><li><a href="https://bz.apache.org/bugzilla/enter_bug.cgi?product=Apache%20httpd-2&amp;component=mod_autoindex">Report a bug</a></li></ul><h3>See also</h3>
<ul class="seealso">
<li><a href="#comments_section">Comments</a></li></ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="query" id="query">Autoindex Request Query Arguments</a> <a title="Permanent link" href="#query" class="permalink">&para;</a></h2>
    

    <p>Various query string arguments are available to give the client
    some control over the ordering of the directory listing, as well as
    what files are listed. If you do not wish to give the client this
    control, the <code><a href="#indexoptions.ignoreclient">IndexOptions
    IgnoreClient</a></code> option disables that functionality.</p>

    <p>The column sorting headers themselves are self-referencing
    hyperlinks that add the sort query options shown below. Any
    option below may be added to any request for the directory
    resource.</p>

    <ul>
      <li><code>C=N</code> sorts the directory by file name</li>

      <li><code>C=M</code> sorts the directory by last-modified
      date, then file name</li>

      <li><code>C=S</code> sorts the directory by size, then file
      name</li>

      <li class="separate"><code>C=D</code> sorts the directory by description, then
      file name</li>

      <li><code>O=A</code> sorts the listing in Ascending
      Order</li>

      <li class="separate"><code>O=D</code> sorts the listing in Descending
      Order</li>

      <li><code>F=0</code> formats the listing as a simple list
      (not FancyIndexed)</li>

      <li><code>F=1</code> formats the listing as a FancyIndexed
      list</li>

      <li class="separate"><code>F=2</code> formats the listing as an
      HTMLTable FancyIndexed list</li>

      <li><code>V=0</code> disables version sorting</li>

      <li class="separate"><code>V=1</code> enables version sorting</li>

      <li><code>P=<var>pattern</var></code> lists only files matching
      the given <var>pattern</var></li>
    </ul>

    <p>Note that the 'P'attern query argument is tested
    <em>after</em> the usual <code class="directive"><a href="#indexignore">IndexIgnore</a></code> directives are processed,
    and all file names are still subjected to the same criteria as
    any other autoindex listing. The Query Arguments parser in
    <code class="module"><a href="../mod/mod_autoindex.html">mod_autoindex</a></code> will stop abruptly when an unrecognized
    option is encountered. The Query Arguments must be well formed,
    according to the table above.</p>

    <p>The simple example below, which can be clipped and saved in
    a header.html file, illustrates these query options. Note that
    the unknown "X" argument, for the submit button, is listed last
    to assure the arguments are all parsed before <code class="module"><a href="../mod/mod_autoindex.html">mod_autoindex</a></code>
    encounters the X=Go input.</p>

    <div class="example"><h3>Example</h3><pre class="prettyprint lang-html">&lt;form action="" method="get"&gt;
    Show me a &lt;select name="F"&gt;
        &lt;option value="0"&gt; Plain list&lt;/option&gt;
        &lt;option value="1" selected="selected"&gt; Fancy list&lt;/option&gt;
        &lt;option value="2"&gt; Table list&lt;/option&gt;
    &lt;/select&gt;
    Sorted by &lt;select name="C"&gt;
        &lt;option value="N" selected="selected"&gt; Name&lt;/option&gt;
        &lt;option value="M"&gt; Date Modified&lt;/option&gt;
        &lt;option value="S"&gt; Size&lt;/option&gt;
        &lt;option value="D"&gt; Description&lt;/option&gt;
    &lt;/select&gt;
    &lt;select name="O"&gt;
        &lt;option value="A" selected="selected"&gt; Ascending&lt;/option&gt;
        &lt;option value="D"&gt; Descending&lt;/option&gt;
    &lt;/select&gt;
    &lt;select name="V"&gt;
        &lt;option value="0" selected="selected"&gt; in Normal order&lt;/option&gt;
        &lt;option value="1"&gt; in Version order&lt;/option&gt;
    &lt;/select&gt;
    Matching &lt;input type="text" name="P" value="*" /&gt;
    &lt;input type="submit" name="X" value="Go" /&gt;
&lt;/form&gt;</pre>
</div>

</div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="AddAlt" id="AddAlt">AddAlt</a> <a name="addalt" id="addalt">Directive</a> <a title="Permanent link" href="#addalt" class="permalink">&para;</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Alternate text to display for a file, instead of an
icon selected by filename</td></tr>
<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>AddAlt <var>string</var> <var>file</var> [<var>file</var>] ...</code></td></tr>
<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>Indexes</td></tr>
<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_autoindex</td></tr>
</table>
    <p><code class="directive">AddAlt</code> provides the alternate text to
    display for a file, instead of an icon, for <code><a href="#indexoptions.fancyindexing">FancyIndexing</a></code>.
    <var>File</var> is a file extension, partial filename, wild-card
    expression or full filename for files to describe.
    If <var>String</var> contains any whitespace, you have to enclose it
    in quotes (<code>"</code> or <code>'</code>). This alternate text
    is displayed if the client is image-incapable, has image loading
    disabled, or fails to retrieve the icon.</p>

    <pre class="prettyprint lang-config">AddAlt "PDF file" *.pdf
AddAlt Compressed *.gz *.zip *.Z</pre>


</div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="AddAltByEncoding" id="AddAltByEncoding">AddAltByEncoding</a> <a name="addaltbyencoding" id="addaltbyencoding">Directive</a> <a title="Permanent link" href="#addaltbyencoding" class="permalink">&para;</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Alternate text to display for a file instead of an icon
selected by MIME-encoding</td></tr>
<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>AddAltByEncoding <var>string</var> <var>MIME-encoding</var>
[<var>MIME-encoding</var>] ...</code></td></tr>
<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>Indexes</td></tr>
<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_autoindex</td></tr>
</table>
    <p><code class="directive">AddAltByEncoding</code> provides the alternate
    text to display for a file, instead of an icon, for <code><a href="#indexoptions.fancyindexing">FancyIndexing</a></code>.
    <var>MIME-encoding</var> is a valid content-encoding, such as
    <code>x-compress</code>. If <var>String</var> contains any whitespace,
    you have to enclose it in quotes (<code>"</code> or <code>'</code>).
    This alternate text is displayed if the client is image-incapable,
    has image loading disabled, or fails to retrieve the icon.</p>

    <pre class="prettyprint lang-config">AddAltByEncoding gzip x-gzip</pre>


</div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="AddAltByType" id="AddAltByType">AddAltByType</a> <a name="addaltbytype" id="addaltbytype">Directive</a> <a title="Permanent link" href="#addaltbytype" class="permalink">&para;</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Alternate text to display for a file, instead of an
icon selected by MIME content-type</td></tr>
<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>AddAltByType <var>string</var> <var>MIME-type</var>
[<var>MIME-type</var>] ...</code></td></tr>
<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>Indexes</td></tr>
<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_autoindex</td></tr>
</table>
    <p><code class="directive">AddAltByType</code> sets the alternate text to
    display for a file, instead of an icon, for <code><a href="#indexoptions.fancyindexing">FancyIndexing</a></code>.
    <var>MIME-type</var> is a valid content-type, such as
    <code>text/html</code>. If <var>String</var> contains any whitespace,
    you have to enclose it in quotes (<code>"</code> or <code>'</code>).
    This alternate text is displayed if the client is image-incapable,
    has image loading disabled, or fails to retrieve the icon.</p>

    <pre class="prettyprint lang-config">AddAltByType 'plain text' text/plain</pre>


</div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="AddDescription" id="AddDescription">AddDescription</a> <a name="adddescription" id="adddescription">Directive</a> <a title="Permanent link" href="#adddescription" class="permalink">&para;</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Description to display for a file</td></tr>
<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>AddDescription <var>string file</var> [<var>file</var>] ...</code></td></tr>
<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>Indexes</td></tr>
<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_autoindex</td></tr>
</table>
    <p>This sets the description to display for a file, for
    <code><a href="#indexoptions.fancyindexing">FancyIndexing</a></code>.
    <var>File</var> is a file extension, partial filename, wild-card
    expression or full filename for files to describe.
    <var>String</var> is enclosed in double quotes (<code>"</code>).</p>

    <pre class="prettyprint lang-config">AddDescription "The planet Mars" mars.gif
AddDescription "My friend Marshall" friends/mars.gif</pre>


    <p>The typical, default description field is 23 bytes wide. 6
    more bytes are added by the <code><a href="#indexoptions.suppressicon">IndexOptions SuppressIcon</a></code> option, 7 bytes are
    added by the <code><a href="#indexoptions.suppresssize">IndexOptions SuppressSize</a></code> option, and 19 bytes are
    added by the <code><a href="#indexoptions.suppresslastmodified">IndexOptions SuppressLastModified</a></code> option.
    Therefore, the widest default the description column is ever
    assigned is 55 bytes.</p>

    <p>Since the <var>File</var> argument may be a partial file name,
    please remember that a too-short partial filename may match
    unintended files. For example, <code>le.html</code> will match the
    file <code>le.html</code> but will also match the file
    <code>example.html</code>. In the event that there may be ambiguity,
    use as complete a filename as you can, but keep in mind that the
    first match encountered will be used, and order your list of
    <code>AddDescription</code> directives accordingly.</p>

    <p>See the <a href="#indexoptions.descriptionwidth">DescriptionWidth</a> <code class="directive"><a href="#indexoptions">IndexOptions</a></code> keyword for details on overriding the size
    of this column, or allowing descriptions of unlimited length.</p>

    <div class="note"><h3>Caution</h3>
      <p>Descriptive text defined with <code class="directive">AddDescription</code>
      may contain HTML markup, such as tags and character entities. If the
      width of the description column should happen to truncate a tagged
      element (such as cutting off the end of a bolded phrase), the
      results may affect the rest of the directory listing.</p>
    </div>

    <div class="note"><h3>Arguments with path information</h3>
      <p>Absolute paths are not currently supported and do not match
      anything at runtime. Arguments with relative path information,
      which would normally only be used in htaccess context, are implicitly
      prefixed with '*/' to avoid matching partial directory names.</p>
    </div>


</div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="AddIcon" id="AddIcon">AddIcon</a> <a name="addicon" id="addicon">Directive</a> <a title="Permanent link" href="#addicon" class="permalink">&para;</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Icon to display for a file selected by name</td></tr>
<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>AddIcon <var>icon</var> <var>name</var> [<var>name</var>]
...</code></td></tr>
<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>Indexes</td></tr>
<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_autoindex</td></tr>
</table>
    <p>This sets the icon to display next to a file ending in
    <var>name</var> for <code><a href="#indexoptions.fancyindexing">FancyIndexing</a></code>. <var>Icon</var> is either a (%-escaped)
    relative URL to the icon, a fully qualified remote URL, or of the format <code>
    (<var>alttext</var>,<var>url</var>)</code> where <var>alttext</var>
    is the text tag given for an icon for non-graphical browsers.</p>

    <p><var>Name</var> is either <code>^^DIRECTORY^^</code> for directories,
    <code>^^BLANKICON^^</code> for blank lines (to format the list
    correctly), a file extension, a wildcard expression, a partial
    filename or a complete filename.</p>

    <p><code>^^BLANKICON^^</code> is only used for formatting, and so
    is unnecessary if you're using <code>IndexOptions
    HTMLTable</code>.</p>

    <pre class="prettyprint lang-config">#Examples
AddIcon (IMG,/icons/image.png) .gif .jpg .png
AddIcon /icons/dir.png ^^DIRECTORY^^
AddIcon /icons/backup.png *~</pre>


    <p><code class="directive"><a href="#addiconbytype">AddIconByType</a></code>
    should be used in preference to <code class="directive">AddIcon</code>,
    when possible.</p>

</div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="AddIconByEncoding" id="AddIconByEncoding">AddIconByEncoding</a> <a name="addiconbyencoding" id="addiconbyencoding">Directive</a> <a title="Permanent link" href="#addiconbyencoding" class="permalink">&para;</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Icon to display next to files selected by MIME
content-encoding</td></tr>
<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>AddIconByEncoding <var>icon</var> <var>MIME-encoding</var>
[<var>MIME-encoding</var>] ...</code></td></tr>
<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>Indexes</td></tr>
<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_autoindex</td></tr>
</table>
    <p>This sets the icon to display next to files with <code><a href="#indexoptions.fancyindexing">FancyIndexing</a></code>.
    <var>Icon</var> is either a (%-escaped) relative URL to the icon,
    a fully qualified remote URL,
    or of the format <code>(<var>alttext</var>,<var>url</var>)</code>
    where <var>alttext</var> is the text tag given for an icon for
    non-graphical browsers.</p>

    <p><var>MIME-encoding</var> is a valid content-encoding, such as
    <code>x-compress</code>.</p>

    <pre class="prettyprint lang-config">AddIconByEncoding /icons/compress.png x-compress</pre>


</div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="AddIconByType" id="AddIconByType">AddIconByType</a> <a name="addiconbytype" id="addiconbytype">Directive</a> <a title="Permanent link" href="#addiconbytype" class="permalink">&para;</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Icon to display next to files selected by MIME
content-type</td></tr>
<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>AddIconByType <var>icon</var> <var>MIME-type</var>
[<var>MIME-type</var>] ...</code></td></tr>
<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>Indexes</td></tr>
<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_autoindex</td></tr>
</table>
    <p>This sets the icon to display next to files of type
    <var>MIME-type</var> for <code><a href="#indexoptions.fancyindexing">FancyIndexing</a></code>.
    <var>Icon</var> is either a (%-escaped) relative URL to the icon,
    a fully qualified remote URL,
    or of the format <code>(<var>alttext</var>,<var>url</var>)</code>
    where <var>alttext</var> is the text tag given for an icon for
    non-graphical browsers.</p>

    <p><var>MIME-type</var> is a wildcard expression matching
    required the mime types.</p>

    <pre class="prettyprint lang-config">AddIconByType (IMG,/icons/image.png) image/*</pre>


</div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="DefaultIcon" id="DefaultIcon">DefaultIcon</a> <a name="defaulticon" id="defaulticon">Directive</a> <a title="Permanent link" href="#defaulticon" class="permalink">&para;</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Icon to display for files when no specific icon is
configured</td></tr>
<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>DefaultIcon <var>url-path</var></code></td></tr>
<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>Indexes</td></tr>
<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_autoindex</td></tr>
</table>
    <p>The <code class="directive">DefaultIcon</code> directive sets the icon
    to display for files when no specific icon is known, for <code><a href="#indexoptions.fancyindexing">FancyIndexing</a></code>.
    <var>Url-path</var> is a (%-escaped) relative URL to the icon,
    or a fully qualified remote URL.</p>

    <pre class="prettyprint lang-config">DefaultIcon /icon/unknown.png</pre>


</div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="HeaderName" id="HeaderName">HeaderName</a> <a name="headername" id="headername">Directive</a> <a title="Permanent link" href="#headername" class="permalink">&para;</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Name of the file that will be inserted at the top
of the index listing</td></tr>
<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>HeaderName <var>filename</var></code></td></tr>
<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>Indexes</td></tr>
<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_autoindex</td></tr>
</table>
    <p>The <code class="directive">HeaderName</code> directive sets the name
    of the file that will be inserted at the top of the index
    listing. <var>Filename</var> is the name of the file to include.</p>

    <pre class="prettyprint lang-config">HeaderName HEADER.html</pre>


    <div class="note">
      <p>Both HeaderName and <code class="directive"><a href="#readmename">ReadmeName</a></code> now treat
      <var>Filename</var> as a URI path relative to the one used to
      access the directory being indexed. If <var>Filename</var> begins
      with a slash, it will be taken to be relative to the <code class="directive"><a href="../mod/core.html#documentroot">DocumentRoot</a></code>.</p>

      <pre class="prettyprint lang-config">HeaderName /include/HEADER.html</pre>


      <p><var>Filename</var> must resolve to a document with a major
      content type of <code>text/*</code> (<em>e.g.</em>,
      <code>text/html</code>, <code>text/plain</code>, etc.). This means
      that <var>filename</var> may refer to a CGI script if the script's
      actual file type (as opposed to its output) is marked as
      <code>text/html</code> such as with a directive like:</p>

      <pre class="prettyprint lang-config">AddType text/html .cgi</pre>


      <p><a href="../content-negotiation.html">Content negotiation</a>
      will be performed if <code class="directive"><a href="../mod/core.html#options">Options</a></code>
      <code>MultiViews</code> is in effect. If <var>filename</var> resolves
      to a static <code>text/html</code> document (not a CGI script) and
      either one of the <code class="directive"><a href="../mod/core.html#options">options</a></code>
      <code>Includes</code> or <code>IncludesNOEXEC</code> is enabled,
      the file will be processed for server-side includes (see the
      <code class="module"><a href="../mod/mod_include.html">mod_include</a></code> documentation).</p>
    </div>

    <p>If the file specified by <code class="directive">HeaderName</code> contains
    the beginnings of an HTML document (&lt;html&gt;, &lt;head&gt;, etc.)
    then you will probably want to set <a href="#indexoptions.suppresshtmlpreamble"><code>IndexOptions
    +SuppressHTMLPreamble</code></a>, so that these tags are not
    repeated.</p>

<h3>See also</h3>
<ul>
<li><code class="directive"><a href="#readmename">ReadmeName</a></code></li>
</ul>
</div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="IndexForbiddenReturn404" id="IndexForbiddenReturn404">IndexForbiddenReturn404</a> <a name="indexforbiddenreturn404" id="indexforbiddenreturn404">Directive</a> <a title="Permanent link" href="#indexforbiddenreturn404" class="permalink">&para;</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Return an HTTP 404 error instead of Forbidden when options 
don't permit directory listing</td></tr>
<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>IndexForbiddenReturn404 On|Off</code></td></tr>
<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>Indexes</td></tr>
<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_autoindex</td></tr>
<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>Added in 2.5.1</td></tr>
</table>
    <p>The <code class="directive">IndexForbiddenReturn404</code> directive controls whether 
    this module returns an HTTP 404 status code instead of an HTTP 403 status code when the
    <code class="directive">Options</code> does not allow indexes to be returned.  </p>

</div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="IndexHeadInsert" id="IndexHeadInsert">IndexHeadInsert</a> <a name="indexheadinsert" id="indexheadinsert">Directive</a> <a title="Permanent link" href="#indexheadinsert" class="permalink">&para;</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Inserts text in the HEAD section of an index page.</td></tr>
<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>IndexHeadInsert <var>"markup ..."</var></code></td></tr>
<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>Indexes</td></tr>
<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_autoindex</td></tr>
</table>
    <p>The <code class="directive">IndexHeadInsert</code> directive specifies a
    string to insert in the <var>&lt;head&gt;</var> section of the HTML
    generated for the index page.</p>
    <pre class="prettyprint lang-config">IndexHeadInsert "&lt;link rel=\"sitemap\" href=\"/sitemap.html\"&gt;"</pre>


</div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="IndexIgnore" id="IndexIgnore">IndexIgnore</a> <a name="indexignore" id="indexignore">Directive</a> <a title="Permanent link" href="#indexignore" class="permalink">&para;</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Adds to the list of files to hide when listing
a directory</td></tr>
<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>IndexIgnore <var>file</var> [<var>file</var>] ...</code></td></tr>
<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>IndexIgnore "."</code></td></tr>
<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>Indexes</td></tr>
<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_autoindex</td></tr>
</table>
    <p>The <code class="directive">IndexIgnore</code> directive adds to the
    list of files to hide when listing a directory. <var>File</var> is a
    shell-style wildcard expression or full
    filename. Multiple IndexIgnore directives add
    to the list, rather than replacing the list of ignored
    files. By default, the list contains <code>.</code> (the current
    directory).</p>

    <pre class="prettyprint lang-config">IndexIgnore .??* *~ *# HEADER* README* RCS CVS *,v *,t</pre>


    <div class="note"><h3>Regular Expressions</h3>
      <p>This directive does not currently work in configuration sections
      that have regular expression arguments, such as  <code class="directive"><a href="../mod/core.html#directorymatch">&lt;DirectoryMatch&gt;</a></code>
      </p>
    </div>

</div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="IndexIgnoreReset" id="IndexIgnoreReset">IndexIgnoreReset</a> <a name="indexignorereset" id="indexignorereset">Directive</a> <a title="Permanent link" href="#indexignorereset" class="permalink">&para;</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Empties the list of files to hide when listing
a directory</td></tr>
<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>IndexIgnoreReset ON|OFF</code></td></tr>
<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>Indexes</td></tr>
<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_autoindex</td></tr>
<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>2.3.10 and later</td></tr>
</table>
    <p>The <code class="directive">IndexIgnoreReset</code> directive removes
    any files ignored by <code class="directive"><a href="#indexignore">IndexIgnore</a></code> otherwise
    inherited from other configuration sections. </p>

    <pre class="prettyprint lang-config">&lt;Directory "/var/www"&gt;
    IndexIgnore *.bak .??* *~ *# HEADER* README* RCS CVS *,v *,t
&lt;/Directory&gt;
&lt;Directory "/var/www/backups"&gt;
    IndexIgnoreReset ON
    IndexIgnore .??* *# HEADER* README* RCS CVS *,v *,t
&lt;/Directory&gt;</pre>


    <div class="warning"><p> Review the default configuration for a list of
    patterns that you might want to explicitly ignore after using this
    directive.</p></div>

</div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="IndexOptions" id="IndexOptions">IndexOptions</a> <a name="indexoptions" id="indexoptions">Directive</a> <a title="Permanent link" href="#indexoptions" class="permalink">&para;</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Various configuration settings for directory
indexing</td></tr>
<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>IndexOptions  [+|-]<var>option</var> [[+|-]<var>option</var>]
...</code></td></tr>
<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>By default, no options are enabled.</code></td></tr>
<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>Indexes</td></tr>
<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_autoindex</td></tr>
</table>
    <p>The <code class="directive">IndexOptions</code> directive specifies the
    behavior of the directory indexing. <var>Option</var> can be one
    of</p>

    <dl>
      <dt><a name="indexoptions.addaltclass" id="indexoptions.addaltclass">AddAltClass</a></dt>
      <dd>Adds an additional CSS class declaration to each row of the
      directory listing table when <code>IndexOptions HTMLTable</code>
      is in effect and an <code>IndexStyleSheet</code> is defined.
      Rather than the standard <code>even</code> and <code>odd</code>
      classes that would otherwise be applied to each row of the table,
      a class of <code>even-<em>ALT</em></code> or
      <code>odd-<em>ALT</em></code> where <em>ALT</em> is either the
      standard alt text associated with the file style (eg. <em>snd</em>,
      <em>txt</em>, <em>img</em>, etc) or the alt text defined by one of
      the various <code>AddAlt*</code> directives.
      </dd>

      <dt><a name="indexoptions.charset" id="indexoptions.charset">Charset=<var>character-set</var></a></dt>

      <dd>The <code>Charset</code> keyword allows you to
      specify the character set of the generated page. The
      default is <code>UTF-8</code> on Windows and Mac OS X,
      and <code>ISO-8859-1</code> elsewhere.
      (It depends on whether the underlying file system
      uses Unicode filenames or not.)

      <pre class="prettyprint lang-config">IndexOptions Charset=UTF-8</pre>

      </dd>

      <dt><a name="indexoptions.descriptionwidth" id="indexoptions.descriptionwidth">DescriptionWidth=[<var>n</var> | *]</a></dt>

      <dd>The <code>DescriptionWidth</code> keyword allows you to
      specify the width of the description column in
      characters.</dd>

      <dt><code>-DescriptionWidth</code> (or unset) allows
      <code class="module"><a href="../mod/mod_autoindex.html">mod_autoindex</a></code> to calculate the best width.</dt>

      <dd><code>DescriptionWidth=<var>n</var></code> fixes the column width to
      <var>n</var> bytes wide.</dd>

      <dd><code>DescriptionWidth=*</code> grows the column to the
      width necessary to accommodate the longest description
      string.

      <strong>See the section on <code class="directive"><a href="#adddescription">AddDescription</a></code> for dangers
      inherent in truncating descriptions.</strong></dd>

      <dt><a name="indexoptions.fancyindexing" id="indexoptions.fancyindexing">FancyIndexing</a></dt>

      <dd>This turns on fancy indexing of directories.</dd>

      <dt><a name="indexoptions.foldersfirst" id="indexoptions.foldersfirst">FoldersFirst</a></dt>

      <dd>If this option is enabled, subdirectory listings will
      <em>always</em> appear first, followed by normal files in the
      directory. The listing is basically broken into two
      components, the files and the subdirectories, and each is
      sorted separately and then displayed subdirectories-first.
      For instance, if the sort order is descending by name, and
      <code>FoldersFirst</code> is enabled, subdirectory
      <code>Zed</code> will be listed before subdirectory
      <code>Beta</code>, which will be listed before normal files
      <code>Gamma</code> and <code>Alpha</code>.
      <strong>This option only has an effect if <a href="#indexoptions.fancyindexing"><code>FancyIndexing</code></a>
      is also enabled.</strong>
      </dd>

      <dt><a name="indexoptions.htmltable" id="indexoptions.htmltable">HTMLTable</a></dt>

      <dd>This option with <code>FancyIndexing</code> constructs
      a simple table for the fancy directory listing.
      It is necessary for utf-8 enabled platforms or if file
      names or description text will alternate between
      left-to-right and right-to-left reading order.</dd>

      <dt><a name="indexoptions.iconsarelinks" id="indexoptions.iconsarelinks">IconsAreLinks</a></dt>

      <dd>This makes the icons part of the anchor for the filename, for
      fancy indexing.</dd>

      <dt><a name="indexoptions.iconheight" id="indexoptions.iconheight">IconHeight[=<var>pixels</var>]</a></dt>

      <dd>Presence of this option, when used with <code>IconWidth</code>,
      will cause the server to include <code>height</code> and
      <code>width</code> attributes in the <code>img</code> tag for the file
      icon. This allows browser to precalculate the page layout without having
      to wait until all the images have been loaded. If no value is given for
      the option, it defaults to the standard height of the icons supplied
      with the Apache httpd software.

      <strong>This option
      only has an effect if <a href="#indexoptions.fancyindexing"><code>FancyIndexing</code></a> is also enabled.</strong>

      </dd>

      <dt><a name="indexoptions.iconwidth" id="indexoptions.iconwidth">IconWidth[=<var>pixels</var>]</a></dt>

      <dd>Presence of this option, when used with <code>IconHeight</code>,
      will cause the server to include <code>height</code> and
      <code>width</code> attributes in the <code>img</code> tag for
      the file icon. This allows browser to precalculate the page
      layout without having to wait until all the images have been
      loaded. If no value is given for the option, it defaults to
      the standard width of the icons supplied with the Apache httpd
      software.</dd>

      <dt><a name="indexoptions.ignorecase" id="indexoptions.ignorecase">IgnoreCase</a></dt>

      <dd>If this option is enabled, names are sorted in a case-insensitive
      manner.  For instance, if the sort order is ascending by name, and
      <code>IgnoreCase</code> is enabled, file Zeta  will be listed after
      file alfa (Note: file GAMMA will always be listed before file gamma).
      </dd>

      <dt><a name="indexoptions.ignoreclient" id="indexoptions.ignoreclient">IgnoreClient</a></dt>

      <dd>This option causes <code class="module"><a href="../mod/mod_autoindex.html">mod_autoindex</a></code> to ignore all
      query variables from the client, including sort order (implies
      <code><a href="#indexoptions.suppresscolumnsorting">SuppressColumnSorting</a></code>.)</dd>

      <dt><a name="indexoptions.namewidth" id="indexoptions.namewidth">NameWidth=[<var>n</var>
               | *]</a></dt>

      <dd>The <code>NameWidth</code> keyword allows you to specify the width
      of the filename column in bytes.</dd>

      <dd><code>-NameWidth</code> (or unset) allows <code class="module"><a href="../mod/mod_autoindex.html">mod_autoindex</a></code> to calculate the best width, but only up
      to 20 bytes wide.</dd>

      <dd><code>NameWidth=<var>n</var></code> fixes the column width to
      <var>n</var> bytes wide.</dd>

      <dd><code>NameWidth=*</code> grows the column to the necessary
      width.</dd>

      <dt><a name="indexoptions.scanhtmltitles" id="indexoptions.scanhtmltitles">ScanHTMLTitles</a></dt>

      <dd>This enables the extraction of the title from HTML documents
      for fancy indexing. If the file does not have a description
      given by <code class="directive"><a href="#adddescription">AddDescription</a></code>
      then httpd will read the document for the value of the
      <code>title</code> element. This is CPU and disk intensive.</dd>

      <dt><a name="indexoptions.showforbidden" id="indexoptions.showforbidden">ShowForbidden</a></dt>

      <dd>If specified, Apache httpd will show files normally hidden because
      the subrequest returned <code>HTTP_UNAUTHORIZED</code> or
      <code>HTTP_FORBIDDEN</code></dd>

      <dt><a name="indexoptions.suppresscolumnsorting" id="indexoptions.suppresscolumnsorting">SuppressColumnSorting</a></dt>

      <dd>If specified, Apache httpd will not make the column headings in a
      FancyIndexed directory listing into links for sorting. The
      default behavior is for them to be links; selecting the
      column heading will sort the directory listing by the values
      in that column. However, query string arguments which are appended
      to the URL will still be honored. That behavior is controlled by <a href="#indexoptions.ignoreclient"><code>IndexOptions
      IgnoreClient</code></a>.</dd>

      <dt><a name="indexoptions.suppressdescription" id="indexoptions.suppressdescription">SuppressDescription</a></dt>

      <dd>This will suppress the file description in fancy indexing
      listings. By default, no file descriptions are defined, and
      so the use of this option will regain 23 characters of screen
      space to use for something else. See <code class="directive"><a href="#adddescription">AddDescription</a></code> for information about setting the file
      description. See also the <code><a href="#indexoptions.descriptionwidth">DescriptionWidth</a></code>
      index option to limit the size of the description column.

      <strong>This option
      only has an effect if <a href="#indexoptions.fancyindexing"><code>FancyIndexing</code></a> is also enabled.</strong>
      </dd>

      <dt><a name="indexoptions.suppresshtmlpreamble" id="indexoptions.suppresshtmlpreamble">SuppressHTMLPreamble</a></dt>

      <dd>If the directory actually contains a file specified by the
      <code class="directive"><a href="#headername">HeaderName</a></code>
      directive, the module usually includes the contents of the file
      after a standard HTML preamble (<code>&lt;html&gt;</code>,
      <code>&lt;head&gt;</code>, <em>et cetera</em>). The
      <code>SuppressHTMLPreamble</code> option disables this behaviour,
      causing the module to start the display with the header file
      contents. The header file must contain appropriate HTML instructions
      in this case. If there is no header file, the preamble is generated
      as usual. If you also specify a <code class="directive"><a href="#readmename">ReadmeName</a></code>, and if that file
      exists, The closing &lt;/body&gt;&lt;/html&gt; tags are also
      omitted from the output, under the assumption that you'll likely
      put those closing tags in that file.</dd>

      <dt><a name="indexoptions.suppressicon" id="indexoptions.suppressicon">SuppressIcon</a></dt>

      <dd>This will suppress the icon in fancy indexing listings.
      Combining both <code>SuppressIcon</code> and
      <code>SuppressRules</code> yields proper HTML 3.2 output, which
      by the final specification prohibits <code>img</code> and
      <code>hr</code> elements from the <code>pre</code> block (used to
      format FancyIndexed listings.)</dd>

      <dt><a name="indexoptions.suppresslastmodified" id="indexoptions.suppresslastmodified">SuppressLastModified</a></dt>

      <dd>This will suppress the display of the last modification date,
      in fancy indexing listings.

      <strong>This option
      only has an effect if <a href="#indexoptions.fancyindexing"><code>FancyIndexing</code></a> is also enabled.</strong>
      </dd>

      <dt><a name="indexoptions.suppressrules" id="indexoptions.suppressrules">SuppressRules</a>
      </dt>

      <dd>This will suppress the horizontal rule lines (<code>hr</code>
      elements) in directory listings. Combining both <code>SuppressIcon</code> and
      <code>SuppressRules</code> yields proper HTML 3.2 output, which
      by the final specification prohibits <code>img</code> and
      <code>hr</code> elements from the <code>pre</code> block (used to
      format FancyIndexed listings.)

      <strong>This option
      only has an effect if <a href="#indexoptions.fancyindexing"><code>FancyIndexing</code></a> is also enabled.</strong>

      </dd>

      <dt><a name="indexoptions.suppresssize" id="indexoptions.suppresssize">SuppressSize</a></dt>

      <dd>This will suppress the file size in fancy indexing listings.

      <strong>This option
      only has an effect if <a href="#indexoptions.fancyindexing"><code>FancyIndexing</code></a> is also enabled.</strong>
      </dd>

      <dt><a name="indexoptions.trackmodified" id="indexoptions.trackmodified">TrackModified</a></dt>

      <dd>This returns the <code>Last-Modified</code> and <code>ETag</code>
      values for the listed directory in the HTTP header. It is only valid
      if the operating system and file system return appropriate stat()
      results. Some Unix systems do so, as do OS2's JFS and Win32's
      NTFS volumes. OS2 and Win32 FAT volumes, for example, do not.
      Once this feature is enabled, the client or proxy can track
      changes to the list of files when they perform a <code>HEAD</code>
      request. Note some operating systems correctly track new and
      removed files, but do not track changes for sizes or dates of
      the files within the directory. <strong>Changes to the size
      or date stamp of an existing file will not update the
      <code>Last-Modified</code> header on all Unix platforms.</strong>
      If this is a concern, leave this option disabled.</dd>

      <dt><a name="indexoptions.type" id="indexoptions.type">Type=<var>MIME content-type</var></a></dt>

      <dd>The <code>Type</code> keyword allows you to
      specify the MIME content-type of the generated page. The default
      is <var>text/html</var>.

      <pre class="prettyprint lang-config">IndexOptions Type=text/plain</pre>

      </dd>

      <dt><a name="indexoptions.useolddateformat" id="indexoptions.useolddateformat">UseOldDateFormat</a>
      (<em>Apache HTTP Server 2.4.26 and later</em>)</dt>

      <dd>The date format used for the <code>Last Modified</code> field was 
      inadvertently changed to <code>"%Y-%m-%d %H:%M"</code> from 
      <code>"%d-%b-%Y %H:%M"</code> in 2.4.0. Setting this option 
      restores the date format from 2.2 and earlier.</dd>

      <dt><a name="indexoptions.versionsort" id="indexoptions.versionsort">VersionSort</a></dt>

      <dd>The <code>VersionSort</code> keyword causes files containing
      version numbers to sort in a natural way. Strings are sorted as
      usual, except that substrings of digits in the name and
      description are compared according to their numeric value.

      <div class="example"><h3>Example:</h3><p><code>
        foo-1.7<br />
        foo-1.7.2<br />
        foo-1.7.12<br />
        foo-1.8.2<br />
        foo-1.8.2a<br />
        foo-1.12
      </code></p></div>

      <p>If the number starts with a zero, then it is considered to
      be a fraction:</p>

      <div class="example"><p><code>
        foo-1.001<br />
        foo-1.002<br />
        foo-1.030<br />
        foo-1.04
      </code></p></div>
      </dd>

      <dt><a name="indexoptions.xhtml" id="indexoptions.xhtml">XHTML</a></dt>

      <dd>The <code>XHTML</code> keyword forces <code class="module"><a href="../mod/mod_autoindex.html">mod_autoindex</a></code>
      to emit XHTML 1.0 code instead of HTML 3.2.
      <strong>This option
      only has an effect if <a href="#indexoptions.fancyindexing"><code>FancyIndexing</code></a> is also enabled.</strong>
      </dd>

    </dl>


   
   <dl><dt>Incremental IndexOptions</dt>
   <dd>
     <p>Be aware of how multiple <code class="directive">IndexOptions</code> are
     handled.</p>

     <ul>
     <li>Multiple <code class="directive">IndexOptions</code> directives for a
     single directory are now merged together. The result of:

     <pre class="prettyprint lang-config">&lt;Directory "/foo"&gt;
    IndexOptions HTMLTable
    IndexOptions SuppressColumnsorting
&lt;/Directory&gt;</pre>


     <p>will be the equivalent of</p>

     <pre class="prettyprint lang-config">IndexOptions HTMLTable SuppressColumnsorting</pre>

     </li>

     <li>The addition of the incremental syntax (<em>i.e.</em>, prefixing
     keywords with <code>+</code> or <code>-</code>).</li>
     </ul>

     <p>Whenever a '+' or '-' prefixed keyword is encountered, it
     is applied to the current <code class="directive">IndexOptions</code>
     settings (which may have been inherited from an upper-level
     directory). However, whenever an unprefixed keyword is processed, it
     clears all inherited options and any incremental settings encountered
     so far. Consider the following example:</p>

     <pre class="prettyprint lang-config">IndexOptions +ScanHTMLTitles -IconsAreLinks FancyIndexing
IndexOptions +SuppressSize</pre>


     <p>The net effect is equivalent to <code>IndexOptions FancyIndexing
     +SuppressSize</code>, because the unprefixed <code>FancyIndexing</code>
     discarded the incremental keywords before it, but allowed them to
     start accumulating again afterward.</p>

     <p>To unconditionally set the <code class="directive">IndexOptions</code> for
     a particular directory, clearing the inherited settings, specify
     keywords without any <code>+</code> or <code>-</code> prefixes.</p>
   </dd>
   </dl>

</div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="IndexOrderDefault" id="IndexOrderDefault">IndexOrderDefault</a> <a name="indexorderdefault" id="indexorderdefault">Directive</a> <a title="Permanent link" href="#indexorderdefault" class="permalink">&para;</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Sets the default ordering of the directory index</td></tr>
<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>IndexOrderDefault Ascending|Descending
Name|Date|Size|Description</code></td></tr>
<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>IndexOrderDefault Ascending Name</code></td></tr>
<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>Indexes</td></tr>
<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_autoindex</td></tr>
</table>
    <p>The <code class="directive">IndexOrderDefault</code> directive is used
    in combination with the <code><a href="#indexoptions.fancyindexing">FancyIndexing</a></code> index option. By default, fancyindexed
    directory listings are displayed in ascending order by filename; the
    <code class="directive">IndexOrderDefault</code> allows you to change this
    initial display order.</p>

    <p><code class="directive">IndexOrderDefault</code> takes two
    arguments. The first must be either <code>Ascending</code> or
    <code>Descending</code>, indicating the direction of the sort.
    The second argument must be one of the keywords <code>Name</code>,
    <code>Date</code>, <code>Size</code>, or <code>Description</code>,
    and identifies the primary key. The secondary key is
    <em>always</em> the ascending filename.</p>

    <p>You can, if desired, prevent the client from reordering the list
    by also adding the <code><a href="#indexoptions.suppresscolumnsorting">SuppressColumnSorting</a></code>
    index option to remove the sort link from the top of the column,
    along with the <code><a href="#indexoptions.ignoreclient">IgnoreClient</a></code> index
    option to prevent them from manually adding sort options to the
    query string in order to override your ordering preferences.</p>

</div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="IndexStyleSheet" id="IndexStyleSheet">IndexStyleSheet</a> <a name="indexstylesheet" id="indexstylesheet">Directive</a> <a title="Permanent link" href="#indexstylesheet" class="permalink">&para;</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Adds a CSS stylesheet to the directory index</td></tr>
<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>IndexStyleSheet <var>url-path</var></code></td></tr>
<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>Indexes</td></tr>
<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_autoindex</td></tr>
</table>
    <p>The <code class="directive">IndexStyleSheet</code> directive sets the name of
    the file that will be used as the CSS for the index listing.
    </p>
    <pre class="prettyprint lang-config">IndexStyleSheet "/css/style.css"</pre>


    <p>Using this directive in conjunction with <code>IndexOptions
    HTMLTable</code> adds a number of CSS classes to the resulting HTML.
    The entire table is given a CSS id of <code>indexlist</code> and the
    following classes are associated with the various parts of the
    listing:</p>

    <table class="bordered"><tr class="header"><th>Class</th><th>Definition</th></tr>
<tr><td>tr.indexhead</td><td>Header row of listing</td></tr>
<tr class="odd"><td>th.indexcolicon and td.indexcolicon</td> <td>Icon column</td></tr>
<tr><td>th.indexcolname and td.indexcolname</td> <td>File name column</td></tr>
<tr class="odd"><td>th.indexcollastmod and td.indexcollastmod</td> <td>Last modified column</td></tr>
<tr><td>th.indexcolsize and td.indexcolsize</td> <td>File size column</td></tr>
<tr class="odd"><td>th.indexcoldesc and td.indexcoldesc</td> <td>Description column</td></tr>
<tr><td>tr.breakrow</td> <td>Horizontal rule at the bottom of the table</td></tr>
<tr class="odd"><td>tr.odd and tr.even</td> <td>Alternating even and odd rows</td></tr>
</table>


</div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="directive-section"><h2><a name="ReadmeName" id="ReadmeName">ReadmeName</a> <a name="readmename" id="readmename">Directive</a> <a title="Permanent link" href="#readmename" class="permalink">&para;</a></h2>
<table class="directive">
<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Name of the file that will be inserted at the end
of the index listing</td></tr>
<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>ReadmeName <var>filename</var></code></td></tr>
<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>Indexes</td></tr>
<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_autoindex</td></tr>
</table>
    <p>The <code class="directive">ReadmeName</code> directive sets the name
    of the file that will be appended to the end of the index
    listing. <var>Filename</var> is the name of the file to include, and
    is taken to be relative to the location being indexed. If
    <var>Filename</var> begins with a slash, as in example 2, it will be taken to be
    relative to the <code class="directive"><a href="../mod/core.html#documentroot">DocumentRoot</a></code>.
    </p>

    <pre class="prettyprint lang-config"># Example 1
ReadmeName FOOTER.html</pre>


    <pre class="prettyprint lang-config"># Example 2
ReadmeName /include/FOOTER.html</pre>


    <p>See also <code class="directive"><a href="#headername">HeaderName</a></code>, where this behavior is described in greater
    detail.</p>

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