You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@httpd.apache.org by sl...@apache.org on 2002/05/23 16:23:54 UTC
cvs commit: httpd-2.0/docs/manual/mod allmodules.html.en core.html.en directives.html.en index.html.en mod_access.html.en mod_actions.html.en mod_alias.html.en mod_asis.html.en mod_auth.html.en mod_auth_anon.html.en mod_auth_dbm.html.en mod_auth_digest.html.en mod_autoindex.html.en mod_cache.html.en mod_cern_meta.html.en mod_cgi.html.en mod_cgid.html.en mod_charset_lite.html.en mod_dav.html.en mod_deflate.html.en mod_dir.html.en mod_env.html.en mod_example.html.en mod_expires.html.en mod_ext_filter.html.en mod_file_cache.html.en mod_headers.html.en mod_imap.html.en mod_include.html.en mod_info.html.en mod_isapi.html.en mod_log_config.html.en mod_mime.html.en mod_mime_magic.html.en mod_negotiation.html.en mod_proxy.html.en mod_rewrite.html.en mod_setenvif.html.en mod_so.html.en mod_speling.html.en mod_ssl.html.en mod_status.html.en mod_suexec.html.en mod_unique_id.html.en mod_userdir.html.en mod_usertrack.html.en mod_vhost_alias.html.en mpm_common.html.en mpm_netware.html.en mpm_winnt.html.en perchild.html.en prefork.html.en worker.html.en
slive 02/05/23 07:23:54
Added: docs/manual/mod allmodules.html.en core.html.en
directives.html.en index.html.en mod_access.html.en
mod_actions.html.en mod_alias.html.en
mod_asis.html.en mod_auth.html.en
mod_auth_anon.html.en mod_auth_dbm.html.en
mod_auth_digest.html.en mod_autoindex.html.en
mod_cache.html.en mod_cern_meta.html.en
mod_cgi.html.en mod_cgid.html.en
mod_charset_lite.html.en mod_dav.html.en
mod_deflate.html.en mod_dir.html.en mod_env.html.en
mod_example.html.en mod_expires.html.en
mod_ext_filter.html.en mod_file_cache.html.en
mod_headers.html.en mod_imap.html.en
mod_include.html.en mod_info.html.en
mod_isapi.html.en mod_log_config.html.en
mod_mime.html.en mod_mime_magic.html.en
mod_negotiation.html.en mod_proxy.html.en
mod_rewrite.html.en mod_setenvif.html.en
mod_so.html.en mod_speling.html.en mod_ssl.html.en
mod_status.html.en mod_suexec.html.en
mod_unique_id.html.en mod_userdir.html.en
mod_usertrack.html.en mod_vhost_alias.html.en
mpm_common.html.en mpm_netware.html.en
mpm_winnt.html.en perchild.html.en prefork.html.en
worker.html.en
Log:
No change here except the filename extensions. Sorry for the massic commit.
Revision Changes Path
1.1 httpd-2.0/docs/manual/mod/allmodules.html.en
Index: allmodules.html.en
===================================================================
<modulefilelist>
<modulefile>core.xml</modulefile>
<modulefile>mod_access.xml</modulefile>
<modulefile>mod_actions.xml</modulefile>
<modulefile>mod_alias.xml</modulefile>
<modulefile>mod_asis.xml</modulefile>
<modulefile>mod_auth.xml</modulefile>
<modulefile>mod_auth_anon.xml</modulefile>
<modulefile>mod_auth_dbm.xml</modulefile>
<modulefile>mod_auth_digest.xml</modulefile>
<modulefile>mod_autoindex.xml</modulefile>
<modulefile>mod_cache.xml</modulefile>
<modulefile>mod_cern_meta.xml</modulefile>
<modulefile>mod_cgi.xml</modulefile>
<modulefile>mod_cgid.xml</modulefile>
<modulefile>mod_charset_lite.xml</modulefile>
<modulefile>mod_dav.xml</modulefile>
<modulefile>mod_deflate.xml</modulefile>
<modulefile>mod_dir.xml</modulefile>
<modulefile>mod_env.xml</modulefile>
<modulefile>mod_example.xml</modulefile>
<modulefile>mod_expires.xml</modulefile>
<modulefile>mod_ext_filter.xml</modulefile>
<modulefile>mod_file_cache.xml</modulefile>
<modulefile>mod_headers.xml</modulefile>
<modulefile>mod_imap.xml</modulefile>
<modulefile>mod_include.xml</modulefile>
<modulefile>mod_info.xml</modulefile>
<modulefile>mod_isapi.xml</modulefile>
<modulefile>mod_log_config.xml</modulefile>
<modulefile>mod_mime.xml</modulefile>
<modulefile>mod_mime_magic.xml</modulefile>
<modulefile>mod_negotiation.xml</modulefile>
<modulefile>mod_proxy.xml</modulefile>
<modulefile>mod_rewrite.xml</modulefile>
<modulefile>mod_setenvif.xml</modulefile>
<modulefile>mod_so.xml</modulefile>
<modulefile>mod_ssl.xml</modulefile>
<modulefile>mod_speling.xml</modulefile>
<modulefile>mod_status.xml</modulefile>
<modulefile>mod_suexec.xml</modulefile>
<modulefile>mod_unique_id.xml</modulefile>
<modulefile>mod_userdir.xml</modulefile>
<modulefile>mod_usertrack.xml</modulefile>
<modulefile>mod_vhost_alias.xml</modulefile>
<modulefile>mpm_common.xml</modulefile>
<modulefile>mpm_netware.xml</modulefile>
<modulefile>mpm_winnt.xml</modulefile>
<modulefile>perchild.xml</modulefile>
<modulefile>prefork.xml</modulefile>
<modulefile>worker.xml</modulefile>
</modulefilelist>
1.1 httpd-2.0/docs/manual/mod/core.html.en
Index: core.html.en
===================================================================
<html xmlns="http://www.w3.org/TR/xhtml1/strict"><head><!--
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
This file is generated from xml source: DO NOT EDIT
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
--><title>core- Apache HTTP Server</title><link href="../style/manual.css" type="text/css" rel="stylesheet"/></head><body><blockquote><div align="center"><img src="../images/sub.gif" alt="[APACHE DOCUMENTATION]"/><h3>Apache HTTP Server Version 2.0</h3></div><h1 align="center">Apache Module core</h1><table cellspacing="1" cellpadding="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td valign="top"><span class="help">Description:</span></td><td>Core Apache HTTP Server features that are always
available</td></tr><tr><td><a href="module-dict.html#Status" class="help">Status:</a></td><td>Core</td></tr></table></td></tr></table><h2>Directives</h2><ul><li><a href="#acceptpathinfo">AcceptPathInfo</a></li><li><a href="#accessfilename">AccessFileName</a></li><li><a href="#adddefaultcharset">AddDefaultCharset</a></li><li><a href="#allowoverride">AllowOverride</a></li><li><a href="#authname">AuthName</a></li><li><a href="#authtype">AuthType</a></li><li><a href="#contentdigest">ContentDigest</a></li><li><a href="#defaulttype">DefaultType</a></li><li><a href="#directory">Directory</a></li><li><a href="#directorymatch">DirectoryMatch</a></li><li><a href="#documentroot">DocumentRoot</a></li><li><a href="#enablemmap">EnableMMAP</a></li><li><a href="#errordocument">ErrorDocument</a></li><li><a href="#errorlog">ErrorLog</a></li><li><a href="#fileetag">FileETag</a></li><li><a href="#files">Files</a></li><li><a href="#filesmatch">FilesMatch</a></li><li><a href="#forcetype">ForceType</a></li><li><a href="#hostnamelookups">HostnameLookups</a></li><li><a href="#identitycheck">IdentityCheck</a></li><li><a href="#ifdefine">IfDefine</a></li><li><a href="#ifmodule">IfModule</a></li><li><a href="#include">Include</a></li><li><a href="#keepalive">KeepAlive</a></li><li><a href="#keepalivetimeout">KeepAliveTimeout</a></li><li><a href="#limit">Limit</a></li><li><a href="#limitexcept">LimitExcept</a></li><li><a href="#limitrequestbody">LimitRequestBody</a></li><li><a href="#limitrequestfields">LimitRequestFields</a></li><li><a href="#limitrequestfieldsize">LimitRequestFieldSize</a></li><li><a href="#limitrequestline">LimitRequestLine</a></li><li><a href="#limitxmlrequestbody">LimitXMLRequestBody</a></li><li><a href="#location">Location</a></li><li><a href="#locationmatch">LocationMatch</a></li><li><a href="#loglevel">LogLevel</a></li><li><a href="#maxkeepaliverequests">MaxKeepAliveRequests</a></li><li><a href="#namevirtualhost">NameVirtualHost</a></li><li><a href="#options">Options</a></li><li><a href="#require">Require</a></li><li><a href="#rlimitcpu">RLimitCPU</a></li><li><a href="#rlimitmem">RLimitMEM</a></li><li><a href="#rlimitnproc">RLimitNPROC</a></li><li><a href="#satisfy">Satisfy</a></li><li><a href="#scriptinterpretersource">ScriptInterpreterSource</a></li><li><a href="#serveradmin">ServerAdmin</a></li><li><a href="#serveralias">ServerAlias</a></li><li><a href="#servername">ServerName</a></li><li><a href="#serverpath">ServerPath</a></li><li><a href="#serverroot">ServerRoot</a></li><li><a href="#serversignature">ServerSignature</a></li><li><a href="#servertokens">ServerTokens</a></li><li><a href="#sethandler">SetHandler</a></li><li><a href="#setinputfilter">SetInputFilter</a></li><li><a href="#setoutputfilter">SetOutputFilter</a></li><li><a href="#timeout">TimeOut</a></li><li><a href="#usecanonicalname">UseCanonicalName</a></li><li><a href="#virtualhost">VirtualHost</a></li></ul><hr/><h2><a name="AcceptPathInfo">AcceptPathInfo</a> <a name="acceptpathinfo">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Controls whether requests can contain trailing pathname information</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>AcceptPathInfo On|Off|Default</td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>AcceptPathInfo Default</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host, directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Core</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>core</td></tr><tr><td align="left" valign="top"><a href="directive-dict.html#Compatibility" class="help">Compatibility:</a></td><td>Available in Apache 2.0.30 and later</td></tr></table></td></tr></table>
<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 PATH_INFO 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 PATH_INFO.</p>
<p>The three possible arguments for the
<code class="directive">AcceptPathInfo</code> 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 PATH_INFO.
Handlers that serve scripts, such as <a href="mod_cgi.html">cgi-script</a> and <a href="mod_isapi.html">isapi-isa</a>, generally accept PATH_INFO 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 PATH_INFO. 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 PATH_INFO. The core handler would usually reject the
request, so you can use the following configuration to enable
such a script:</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
<Files "mypaths.shtml"><br>
Options +Includes<br>
SetOutputFilter INCLUDES<br>
AcceptPathInfo on<br>
</Files>
</code></td></tr></table></blockquote>
<hr/><h2><a name="AccessFileName">AccessFileName</a> <a name="accessfilename">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Sets the name of the .htaccess file</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>AccessFileName <em>filename</em> [<em>filename</em>] ...</td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>AccessFileName .htaccess</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Core</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>core</td></tr></table></td></tr></table>
<p>When returning a document to the client the server looks for
the first existing access control file from this list of names
in every directory of the path to the document, if access
control files are enabled for that directory. For example:</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
AccessFileName .acl
</code></td></tr></table></blockquote>
<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>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
<Directory /><br>
AllowOverride None<br>
</Directory>
</code></td></tr></table></blockquote>
<p><strong>See also </strong></p><ul><li><a href="#allowoverride" class="directive"><code class="directive">AllowOverride</code></a></li><li><a href="../configuring.html">Configuration Files</a></li></ul><hr/><h2><a name="AddDefaultCharset">AddDefaultCharset</a> <a name="adddefaultcharset">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Specifies the default character set to be added for a
response without an explicit character set</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>AddDefaultCharset On|Off|<em>charset</em></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>AddDefaultCharset Off</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host, directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Core</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>core</td></tr></table></td></tr></table>
<p>This directive specifies the name of the character set that
will be added to any response that does not have any parameter on
the content type in the HTTP headers. This will override any
character set specified in the body of the document via a
<code>META</code> tag. A setting of <code>AddDefaultCharset
Off</code> disables this
functionality. <code>AddDefaultCharset On</code> enables
Apache's internal default charset of <code>iso-8859-1</code> as
required by the directive. You can also specify an alternate
<em>charset</em> to be used. For example:</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
AddDefaultCharset utf-8
</code></td></tr></table></blockquote>
<hr/><h2><a name="AllowOverride">AllowOverride</a> <a name="allowoverride">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Sets the types of directives that are allowed in
.htaccess files</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>AllowOverride All|None|<em>directive-type</em> [<em>directive-type</em>] ...</td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>AllowOverride All</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>directory</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Core</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>core</td></tr></table></td></tr></table>
<p>When the server finds an .htaccess file (as specified by <a href="#accessfilename" class="directive"><code class="directive">AccessFileName</code></a>) it needs to know
which directives declared in that file can override earlier
access information.</p>
<p>When this directive is set to <code>None</code>, then
.htaccess files are completely ignored. In this case, the
server will not even attempt to read .htaccess 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
.htaccess files.</p>
<p>The <em>directive-type</em> can be one of the following
groupings of directives.</p>
<dl>
<dt>AuthConfig</dt>
<dd>
Allow use of the authorization directives (<a href="mod_auth_dbm.html#authdbmgroupfile" class="directive"><code class="directive">AuthDBMGroupFile</code></a>,
<a href="mod_auth_dbm.html#authdbmuserfile" class="directive"><code class="directive">AuthDBMUserFile</code></a>,
<a href="mod_auth.html#authgroupfile" class="directive"><code class="directive">AuthGroupFile</code></a>,
<a href="#authname" class="directive"><code class="directive">AuthName</code></a>,
<a href="#authtype" class="directive"><code class="directive">AuthType</code></a>, <a href="mod_auth.html#authuserfile" class="directive"><code class="directive">AuthUserFile</code></a>, <a href="#require" class="directive"><code class="directive">Require</code></a>, <em>etc.</em>).</dd>
<dt>FileInfo</dt>
<dd>
Allow use of the directives controlling document types (<a href="#defaulttype" class="directive"><code class="directive">DefaultType</code></a>, <a href="#errordocument" class="directive"><code class="directive">ErrorDocument</code></a>, <a href="#forcetype" class="directive"><code class="directive">ForceType</code></a>, <a href="mod_negotiation.html#languagepriority" class="directive"><code class="directive">LanguagePriority</code></a>,
<a href="#sethandler" class="directive"><code class="directive">SetHandler</code></a>, <a href="#setinputfilter" class="directive"><code class="directive">SetInputFilter</code></a>, <a href="#setoutputfilter" class="directive"><code class="directive">SetOutputFilter</code></a>, and
<code><a href="mod_mime.html">mod_mime</a></code> Add* and Remove*
directives, <em>etc.</em>).</dd>
<dt>Indexes</dt>
<dd>
Allow use of the directives controlling directory indexing
(<a href="mod_autoindex.html#adddescription" class="directive"><code class="directive">AddDescription</code></a>,
<a href="mod_autoindex.html#addicon" class="directive"><code class="directive">AddIcon</code></a>, <a href="mod_autoindex.html#addiconbyencoding" class="directive"><code class="directive">AddIconByEncoding</code></a>,
<a href="mod_autoindex.html#addiconbytype" class="directive"><code class="directive">AddIconByType</code></a>,
<a href="mod_autoindex.html#defaulticon" class="directive"><code class="directive">DefaultIcon</code></a>, <a href="mod_dir.html#directoryindex" class="directive"><code class="directive">DirectoryIndex</code></a>, <a href="mod_autoindex.html#fancyindexing" class="directive"><code class="directive">FancyIndexing</code></a>, <a href="mod_autoindex.html#headername" class="directive"><code class="directive">HeaderName</code></a>, <a href="mod_autoindex.html#indexignore" class="directive"><code class="directive">IndexIgnore</code></a>, <a href="mod_autoindex.html#indexoptions" class="directive"><code class="directive">IndexOptions</code></a>, <a href="mod_autoindex.html#readmename" class="directive"><code class="directive">ReadmeName</code></a>,
<em>etc.</em>).</dd>
<dt>Limit</dt>
<dd>
Allow use of the directives controlling host access (<a href="mod_access.html#allow" class="directive"><code class="directive">Allow</code></a>, <a href="mod_access.html#deny" class="directive"><code class="directive">Deny</code></a> and <a href="mod_access.html#order" class="directive"><code class="directive">Order</code></a>).</dd>
<dt>Options</dt>
<dd>
Allow use of the directives controlling specific directory
features (<a href="#options" class="directive"><code class="directive">Options</code></a> and
<a href="mod_include.html#xbithack" class="directive"><code class="directive">XBitHack</code></a>).</dd>
</dl>
<p>Example:</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>AllowOverride AuthConfig Indexes</code></td></tr></table></blockquote>
<p><strong>See also </strong></p><ul><li><a href="#accessfilename" class="directive"><code class="directive">AccessFileName</code></a></li><li><a href="../configuring.html">Configuration Files</a></li></ul><hr/><h2><a name="AuthName">AuthName</a> <a name="authname">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Sets the authorization realm for use in HTTP
authentication</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>AuthName <em>auth-domain</em></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>AuthConfig</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Core</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>core</td></tr></table></td></tr></table>
<p>This directive sets the name of the authorization realm for a
directory. This realm is given to the client so that the user
knows which username and password to send.
<code class="directive">AuthName</code> takes a single argument; if the
realm name contains spaces, it must be enclosed in quotation
marks. It must be accompanied by <a href="#authtype" class="directive"><code class="directive">AuthType</code></a> and <a href="#require" class="directive"><code class="directive">Require</code></a> directives, and directives such
as <a href="mod_auth.html#authuserfile" class="directive"><code class="directive">AuthUserFile</code></a> and
<a href="mod_auth.html#authgroupfile" class="directive"><code class="directive">AuthGroupFile</code></a> to
work.</p>
<p>For example:</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>AuthName "Top Secret"</code></td></tr></table></blockquote>
<p>The string provided for the <code>AuthRealm</code> is what will
appear in the password dialog provided by most browsers.</p>
<p><strong>See also </strong></p><ul><li><a href="../howto/auth.html">Authentication, Authorization, and
Access Control</a></li></ul><hr/><h2><a name="AuthType">AuthType</a> <a name="authtype">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Selects the type of user authentication</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>AuthType Basic|Digest</td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>AuthConfig</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Core</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>core</td></tr></table></td></tr></table>
<p>This directive selects the type of user authentication for a
directory. Only <code>Basic</code> and <code>Digest</code> are
currently implemented.
It must be accompanied by <a href="#authname" class="directive"><code class="directive">AuthName</code></a> and <a href="#require" class="directive"><code class="directive">Require</code></a> directives, and directives such
as <a href="mod_auth.html#authuserfile" class="directive"><code class="directive">AuthUserFile</code></a> and
<a href="mod_auth.html#authgroupfile" class="directive"><code class="directive">AuthGroupFile</code></a> to
work.</p>
<p><strong>See also </strong></p><ul><li><a href="../howto/auth.html">Authentication, Authorization,
and Access Control</a></li></ul><hr/><h2><a name="ContentDigest">ContentDigest</a> <a name="contentdigest">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Enables the generation of Content-MD5 HTTP Response
headers</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>ContentDigest on|off</td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>ContentDigest off</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host, directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>Options</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Core</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>core</td></tr><tr><td align="left" valign="top"><a href="directive-dict.html#Compatibility" class="help">Compatibility:</a></td><td>Available in Apache 1.1 and later</td></tr></table></td></tr></table>
<p>This directive enables the generation of
<code>Content-MD5</code> headers as defined in RFC1864
respectively RFC2068.</p>
<p>MD5 is an algorithm for computing a "message digest"
(sometimes called "fingerprint") of arbitrary-length data, with
a high degree of confidence that any alterations in the data
will be reflected in alterations in the message digest.</p>
<p>The <code>Content-MD5</code> header provides an end-to-end
message integrity check (MIC) of the entity-body. A proxy or
client may check this header for detecting accidental
modification of the entity-body in transit. Example header:</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
Content-MD5: AuLb7Dp1rqtRtxz2m9kRpA==
</code></td></tr></table></blockquote>
<p>Note that this can cause performance problems on your server
since the message digest is computed on every request (the
values are not cached).</p>
<p><code>Content-MD5</code> is only sent for documents served
by the core, and not by any module. For example, SSI documents,
output from CGI scripts, and byte range responses do not have
this header.</p>
<hr/><h2><a name="DefaultType">DefaultType</a> <a name="defaulttype">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Sets the MIME content-type that will be sent if the
server cannot determine a type in any other way</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>DefaultType <em>MIME-type</em></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>DefaultType text/plain</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host, directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>FileInfo</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Core</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>core</td></tr></table></td></tr></table>
<p>There will be times when the server is asked to provide a
document whose type cannot be determined by its MIME types
mappings.</p>
<p>The server must inform the client of the content-type of the
document, so in the event of an unknown type it uses the
<code>DefaultType</code>. For example:</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
<code>DefaultType image/gif</code>
</code></td></tr></table></blockquote>
<p>would be appropriate for a directory which contained many gif
images with filenames missing the .gif extension.</p>
<p>Note that unlike <a href="#forcetype" class="directive"><code class="directive">ForceType</code></a>, this directive is only
provides the default mime-type. All other mime-type definitions,
including filename extensions, that might identify the media type
will override this default.</p>
<hr/><h2><a name="Directory"><Directory></a> <a name="directory">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Enclose a group of directives that apply only to the
named file-system directory and sub-directories</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><Directory <em>directory-path</em>>
... </Directory></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Core</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>core</td></tr></table></td></tr></table>
<p><code class="directive"><Directory></code> and
<code></Directory></code> are used to enclose a group of
directives which will apply only to the named directory and
sub-directories of that directory. Any directive which is allowed
in a directory context may be used. <em>Directory-path</em> is
either the full path to a directory, or a wild-card string. In a
wild-card string, `?' matches any single character, and `*'
matches any sequences of characters. You may
also use `[]' character ranges like in the shell. Also as of
Apache 1.3 none of the wildcards match a `/' character, which more
closely mimics the behavior of Unix shells. Example:</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
<Directory /usr/local/httpd/htdocs><br>
Options Indexes FollowSymLinks<br>
</Directory><br>
</code></td></tr></table></blockquote>
<p>Extended regular
expressions can also be used, with the addition of the
<code>~</code> character. For example:</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
<Directory ~ "^/www/.*/[0-9]{3}">
</code></td></tr></table></blockquote>
<p>would match directories in /www/ that consisted of three
numbers.</p>
<p>If multiple (non-regular expression) directory sections
match the directory (or 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>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
<Directory /><br>
AllowOverride None<br>
</Directory><br>
<br>
<Directory /home/*><br>
AllowOverride FileInfo<br>
</Directory>
</code></td></tr></table></blockquote>
<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/web</code>).</li>
<li>Apply any FileInfo directives in
<code>/home/web/.htaccess</code></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>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code><Directory ~ abc$><br>
... directives here ...<br>
</Directory><br>
</code></td></tr></table></blockquote>
<p>The regular expression section won't be considered until after
all normal <Directory>s and <code>.htaccess</code> files
have been applied. Then the regular expression will match on
<code>/home/abc/public_html/abc</code> and be applied.</p>
<p><strong>Note that the default Apache access for
<Directory /> is <code>Allow from All</code>. This means
that Apache will serve any file mapped from an URL. It is
recommended that you change this with a block such
as</strong></p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
<Directory /><br>
Order Deny,Allow<br>
Deny from All<br>
</Directory>
</code></td></tr></table></blockquote>
<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 typically occur in
the access.conf file, but they may appear in any configuration
file. <code class="directive"><Directory></code> directives
cannot nest, and cannot appear in a <a href="#limit" class="directive"><code class="directive"><Limit></code></a> or <a href="#limitexcept" class="directive"><code class="directive"><LimitExcept></code></a> section.</p>
<p><strong>See also </strong></p><ul><li><a href="../sections.html">How
Directory, Location and Files sections work</a> for an
explanation of how these different sections are combined when a
request is received</li></ul><hr/><h2><a name="DirectoryMatch"><DirectoryMatch></a> <a name="directorymatch">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Enclose a group of directives that apply only to
file-system directories that match a regular expression and their
subdirectories</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><Directory <em>regex</em>>
... </Directory></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Core</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>core</td></tr></table></td></tr></table>
<p><code class="directive"><DirectoryMatch></code> and
<code></DirectoryMatch></code> are used to enclose a group
of directives which will apply only to the named directory and
sub-directories of that directory, the same as <a href="#directory" class="directive"><code class="directive"><Directory></code></a>. However, it
takes as an argument a regular expression. For example:</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
<DirectoryMatch "^/www/.*/[0-9]{3}">
</code></td></tr></table></blockquote>
<p>would match directories in <code>/www/</code> that consisted of three
numbers.</p>
<p><strong>See also </strong></p><ul><li><a href="#directory" class="directive"><code class="directive"><Directory></code></a> for
a description of how regular expressions are mixed in with normal
<code><Directory></code>s</li><li><a href="../sections.html">How Directory, Location and Files sections
work</a> for an explanation of how these different sections are
combined when a request is received</li></ul><hr/><h2><a name="DocumentRoot">DocumentRoot</a> <a name="documentroot">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Sets the directory that forms the main document tree visible
from the web</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>DocumentRoot <em>directory-path</em></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>DocumentRoot /usr/local/apache/htdocs</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Core</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>core</td></tr></table></td></tr></table>
<p>This directive sets the directory from which httpd will
serve files. Unless matched by a directive like Alias, the
server appends the path from the requested URL to the document
root to make the path to the document. Example:</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
DocumentRoot /usr/web
</code></td></tr></table></blockquote>
<p>then an access to
<code>http://www.my.host.com/index.html</code> refers to
<code>/usr/web/index.html</code>.</p>
<p>The <code class="directive">DocumentRoot</code> should be specified without
a trailing slash.</p>
<p><strong>See also </strong></p><ul><li><a href="../urlmapping.html">Mapping URLs to Filesystem
Location</a></li></ul><hr/><h2><a name="EnableMMAP">EnableMMAP</a> <a name="enablemmap">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Controls whether the httpd uses memory-mapping to read files
during delivery</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>EnableMMAP on|off</td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>EnableMMAP on</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host, directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Core</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>core</td></tr></table></td></tr></table>
<p>This directive controls whether the httpd 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 <code><a href="mod_include.html">mod_include</a></code>--
Apache 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 httpd.</li>
<li>With an NFS-mounted <a href="#documentroot" class="directive"><code class="directive">DocumentRoot</code></a>,
the httpd may crash due tof a segmentation fault if a file is deleted
or truncated while the httpd has it memory-mapped.</li>
</ul>
<p>
For server configurations that are vulnerable to these problems,
you should disable memory-mapping of delivered files by specifying:
</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
EnableMMAP off
</code></td></tr></table></blockquote>
<hr/><h2><a name="ErrorDocument">ErrorDocument</a> <a name="errordocument">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Specifies what the server will return to the client
in case of an error</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>ErrorDocument <em>error-code document</em></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host, directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>FileInfo</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Core</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>core</td></tr><tr><td align="left" valign="top"><a href="directive-dict.html#Compatibility" class="help">Compatibility:</a></td><td>Quoting syntax for text messages is different in Apache
2.0</td></tr></table></td></tr></table>
<p>In the event of a problem or error, Apache 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>redirect to a local <em>URL-path</em> to handle the
problem/error</li>
<li>redirect to an external <em>URL</em> to handle the
problem/error</li>
</ol>
<p>The first option is the default, while options 2-4 are
configured using the <code class="directive">ErrorDocument</code>
directive, which is followed by the HTTP response code and a URL
or a message. Apache will sometimes offer additional information
regarding the problem/error.</p>
<p>URLs can begin with a slash (/) for local URLs, or be a full
URL which the client can resolve. Alternatively, a message can
be provided to be displayed by the browser. Examples:</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
ErrorDocument 500
http://foo.example.com/cgi-bin/tester<br>
ErrorDocument 404 /cgi-bin/bad_urls.pl<br>
ErrorDocument 401 /subscription_info.html<br>
ErrorDocument 403 "Sorry can't allow you access
today"
</code></td></tr></table></blockquote>
<p>Note that when you specify an <code class="directive">ErrorDocument</code>
that points to a remote URL (ie. anything with a method such as
"http" in front of it), Apache 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
"ErrorDocument 401" directive then it must refer to a local
document.</strong></p>
<p>Prior to version 2.0, messages were indicated by prefixing
them with a single unmatched double quote character.</p>
<p><strong>See also </strong></p><ul><li><a href="../custom-error.html">documentation of
customizable responses</a></li></ul><hr/><h2><a name="ErrorLog">ErrorLog</a> <a name="errorlog">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Sets the name of the file to which the server
will log errors</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td> ErrorLog <em>file-path</em>|syslog[:<em>facility</em>]</td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>ErrorLog logs/error_log (Unix)
ErrorLog logs/error.log (Windows and OS/2)</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Core</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>core</td></tr></table></td></tr></table>
<p>The <code class="directive">ErrorLog</code> directive sets the name of
the file to which the server will log any errors it encounters. If
the <em>file-path</em> does not begin with a slash (/) then it is
assumed to be relative to the <a href="#serverroot" class="directive"><code class="directive">ServerRoot</code></a>. If the <em>file-path</em>
begins with a pipe (|) then it is assumed to be a command to spawn
to handle the error log.</p>
<p>Using <code>syslog</code> instead of a filename enables logging
via syslogd(8) if the system supports it. The default is to use
syslog facility <code>local7</code>, but you can override this by
using the <code>syslog:</code><em>facility</em> syntax where
<em>facility</em> can be one of the names usually documented in
syslog(1).</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 logfiles are stored is writable by
anyone other than the user that starts the server.</p>
<p><strong>See also </strong></p><ul><li><a href="#loglevel" class="directive"><code class="directive">LogLevel</code></a></li><li><a href="../logs.html">Apache Log Files</a></li></ul><hr/><h2><a name="FileETag">FileETag</a> <a name="fileetag">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Configures the file attributes used to create the ETag
HTTP response header</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>FileETag <em>component</em> ...</td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host, directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>FileInfo</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Core</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>core</td></tr></table></td></tr></table>
<p>
The <code class="directive">FileETag</code> directive configures the file
attributes that are used to create the ETag (entity tag) response
header field when the document is based on a file. (The ETag
value is used in cache management to save network bandwidth.) In
Apache 1.3.22 and earlier, the ETag value was <em>always</em> formed
from the file's inode, size, and last-modified time (mtime). The
FileETag 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 (equivalent to
'<code>FileETag INode MTime Size</code>')</dd>
<dt><strong>None</strong></dt>
<dd>If a document is file-based, no ETag field will be included in the
response</dd>
</dl>
<p>
The INode, MTime, and Size keywords may be prefixed with either '+'
or '-', 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 INode MTime Size</code>', and a
subdirectory's includes '<code>FileETag -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 MTime Size</code>'.
</p>
<hr/><h2><a name="Files"><Files></a> <a name="files">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Contains that directives that apply to matched
filenames</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><Files <em>filename</em>> ... </Files></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host, directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Core</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>core</td></tr></table></td></tr></table>
<p>The <code class="directive"><Files></code> directive
provides for access control by filename. It is comparable to the
<a href="#directory" class="directive"><code class="directive">Directory</code></a>
directive and <a href="#location" class="directive"><code class="directive">Location</code></a> directives. It should be
matched with a <code></Files></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. <code class="directive"><Files></code>
sections are processed in the order they appear in the
configuration file, after the <a href="#directory" class="directive"><code class="directive"><Directory></code></a> sections and
<code>.htaccess</code> files are read, but before <a href="#location" class="directive"><code class="directive"><Location></code></a> sections. Note
that <code class="directive"><Files></code> can be nested
inside <a href="#directory" class="directive"><code class="directive"><Directory></code></a> sections to restrict the
portion of the filesystem they apply to.</p>
<p>The <em>filename</em> argument should include a filename, or
a wild-card string, where `?' matches any single character, and
`*' matches any sequences of characters. Extended regular
expressions can also be used, with the addition of the
<code>~</code> character. For example:</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
<Files ~ "\.(gif|jpe?g|png)$">
</code></td></tr></table></blockquote>
<p>would match most common Internet graphics formats. In Apache 1.3
and later, <a href="#filesmatch" class="directive"><code class="directive"><FilesMatch></code></a> is preferred, however.</p>
<p>Note that unlike <a href="#directory" class="directive"><code class="directive"><Directory></code></a> and <a href="#location" class="directive"><code class="directive"><Location></code></a> sections, <code class="directive"><Files></code> sections can be used inside
.htaccess files. This allows users to control access to their own
files, at a file-by-file level.</p>
<p><strong>See also </strong></p><ul><li><a href="../sections.html">How
Directory, Location and Files sections work</a> for an
explanation of how these different sections are combined when a
request is received</li></ul><hr/><h2><a name="FilesMatch"><FilesMatch></a> <a name="filesmatch">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Contains that directives that apply to regular-expression matched
filenames</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><FilesMatch <em>regex</em>> ... </FilesMatch></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host, directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Core</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>core</td></tr></table></td></tr></table>
<p>The <code class="directive"><FilesMatch></code> directive
provides for access control by filename, just as the <a href="#files" class="directive"><code class="directive"><Files></code></a> directive
does. However, it accepts a regular expression. For example:</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
<FilesMatch "\.(gif|jpe?g|png)$">
</code></td></tr></table></blockquote>
<p>would match most common Internet graphics formats.</p>
<p><strong>See also </strong></p><ul><li><a href="../sections.html">How
Directory, Location and Files sections work</a> for an
explanation of how these different sections are combined when a
request is received</li></ul><hr/><h2><a name="ForceType">ForceType</a> <a name="forcetype">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Forces all matching files to be served with the specified
MIME content-type</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>ForceType <em>mime-type</em></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Core</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>core</td></tr><tr><td align="left" valign="top"><a href="directive-dict.html#Compatibility" class="help">Compatibility:</a></td><td>Moved to the core in Apache 2.0</td></tr></table></td></tr></table>
<p>When placed into an <code>.htaccess</code> file or a
<a href="#directory" class="directive"><code class="directive"><Directory></code></a>, or
<a href="#location" class="directive"><code class="directive"><Location></code></a> or
<a href="#files" class="directive"><code class="directive"><Files></code></a>
section, this directive forces all matching files to be served
with the content type identification given by
<em>mime-type</em>. For example, if you had a directory full of
GIF files, but did not want to label them all with ".gif", you
might want to use:</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
ForceType image/gif
</code></td></tr></table></blockquote>
<p>Note that unlike <a href="#defaulttype" class="directive"><code class="directive">DefaultType</code></a>,
this directive overrides all mime-type associations, including
filename extensions, that might identify the media type.</p>
<hr/><h2><a name="HostnameLookups">HostnameLookups</a> <a name="hostnamelookups">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Enables DNS lookups on client IP addresses</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>HostnameLookups on|off|double</td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>HostnameLookups off</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host, directory</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Core</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>core</td></tr></table></td></tr></table>
<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. 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 <code><a href="mod_access.html">mod_access</a></code> 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 off 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 <a href="../programs/logresolve.html">logresolve</a>, provided in
the <em>/support</em> directory, can be used to look up host
names from logged IP addresses offline.</p>
<hr/><h2><a name="IdentityCheck">IdentityCheck</a> <a name="identitycheck">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Enables logging of the RFC1413 identity of the remote
user</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>IdentityCheck on|off</td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>IdentityCheck off</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td/></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Core</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>core</td></tr></table></td></tr></table>
<p>This directive enables RFC1413-compliant logging of the
remote user name for each connection, where the client machine
runs identd or something similar. This information is logged in
the access log.</p>
<p>The information should not be trusted in any way except for
rudimentary usage tracking.</p>
<p>Note that this can cause serious latency problems accessing
your server since every request requires one of these lookups
to be performed. When firewalls are involved each lookup might
possibly fail and add 30 seconds of latency to each hit. So in
general this is not very useful on public servers accessible
from the Internet.</p>
<hr/><h2><a name="IfDefine"><IfDefine></a> <a name="ifdefine">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Encloses directives that will be processed only
if a test is true at startup</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><IfDefine [!]<em>parameter-name</em>> <em>...</em>
</IfDefine></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host, directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Core</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>core</td></tr></table></td></tr></table>
<p>The <code><IfDefine
<em>test</em>>...</IfDefine></code> section is used to
mark directives that are conditional. The directives within an
<code class="directive"><IfDefine></code> section are only
processed if the <em>test</em> is true. If <em>test</em> is false,
everything between the start and end markers is ignored.</p>
<p>The <em>test</em> in the <code class="directive"><IfDefine></code> section directive can be one
of two forms:</p>
<ul>
<li><em>parameter-name</em></li>
<li><code>!</code><em>parameter-name</em></li>
</ul>
<p>In the former case, the directives between the start and end
markers are only processed if the parameter named
<em>parameter-name</em> is defined. The second format reverses
the test, and only processes the directives if
<em>parameter-name</em> is <strong>not</strong> defined.</p>
<p>The <em>parameter-name</em> argument is a define as given on
the <code>httpd</code> command line via
<code>-D</code><em>parameter-</em>, at the time the server was
started.</p>
<p><code class="directive"><IfDefine></code> sections are
nest-able, which can be used to implement simple
multiple-parameter tests. Example:</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code><pre>
$ httpd -DReverseProxy ...
# httpd.conf
<IfDefine ReverseProxy>
LoadModule rewrite_module modules/mod_rewrite.so
LoadModule proxy_module modules/libproxy.so
</IfDefine>
</pre></code></td></tr></table></blockquote>
<hr/><h2><a name="IfModule"><IfModule></a> <a name="ifmodule">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Encloses directives that are processed conditional on the
presence of absence of a specific module</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><IfModule [!]<em>module-name</em>> <em>...</em>
</IfModule></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host, directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Core</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>core</td></tr></table></td></tr></table>
<p>The <code><IfModule
<em>test</em>>...</IfModule></code> section is used to
mark directives that are conditional. The directives within an
<code class="directive"><IfModule></code> section are only
processed if the <em>test</em> is true. If <em>test</em> is false,
everything between the start and end markers is ignored.</p>
<p>The <em>test</em> in the <code class="directive"><IfModule></code> section directive can be one
of two forms:</p>
<ul>
<li><em>module name</em></li>
<li>!<em>module name</em></li>
</ul>
<p>In the former case, the directives between the start and end
markers are only processed if the module named <em>module
name</em> is included in Apache -- either compiled in or
dynamically loaded using <a href="mod_so.html#loadmodule" class="directive"><code class="directive">LoadModule</code></a>. The second format
reverses the test, and only processes the directives if <em>module
name</em> is <strong>not</strong> included.</p>
<p>The <em>module name</em> argument is the file name of the
module, at the time it was compiled.
For example, <code>mod_rewrite.c</code>.</p>
<p><code class="directive"><IfModule></code> sections are
nest-able, which can be used to implement simple multiple-module
tests.</p>
<hr/><h2><a name="Include">Include</a> <a name="include">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Includes other configuration files from within
the server configuration files</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>Include <em>file-path</em>|<em>directory-path</em></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Core</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>core</td></tr></table></td></tr></table>
<p>This directive allows inclusion of other configuration files
from within the server configuration files.</p>
<p>If <code class="directive">Include</code> points to a directory, rather than a
file, Apache will read all files in that directory, and any
subdirectory, and parse those as configuration files.</p>
<p>The file path specified may be a fully qualified path (i.e.
starting with a slash), or may be relative to the
<a href="#serverroot" class="directive"><code class="directive">ServerRoot</code></a> directory.</p>
<p>Examples:</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
Include /usr/local/apache/conf/ssl.conf<br>
Include /usr/local/apache/conf/vhosts/
</code></td></tr></table></blockquote>
<p>Or, providing paths relative to your <code>ServerRoot</code>
directory:</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
Include conf/ssl.conf<br>
Include conf/vhosts/
</code></td></tr></table></blockquote>
<p>Make sure that an included directory does not contain any stray
files, such as editor temporary files, for example, as Apache will
attempt to read them in and use the contents as configuration
directives, which may cause the server to fail on start up.
Running <code>apachectl configtest</code> will give you a list of
the files that are being processed during the configuration
check:</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code><pre>
root@host# apachectl configtest
Processing config directory: /usr/local/apache/conf/vhosts
Processing config file: /usr/local/apache/conf/vhosts/vhost1
Processing config file: /usr/local/apache/conf/vhosts/vhost2
Syntax OK
</pre></code></td></tr></table></blockquote>
<p>This will help in verifying that you are getting only the files
that you intended as part of your configuration.</p>
<p><strong>See also </strong></p><ul><li><a href="../programs/apachectl.html">apachectl</a></li></ul><hr/><h2><a name="KeepAlive">KeepAlive</a> <a name="keepalive">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Turns on or off HTTP persistent connections.</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>KeepAlive on|off</td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>KeepAlive On</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Core</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>core</td></tr></table></td></tr></table>
<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 in Apache 1.2 and
later, 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><strong>See also </strong></p><ul><li><a href="#maxkeepaliverequests" class="directive"><code class="directive">MaxKeepAliveRequests</code></a></li></ul><hr/><h2><a name="KeepAliveTimeout">KeepAliveTimeout</a> <a name="keepalivetimeout">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Sets the amount of time the server will wait for subsequent
requests on a persistent connection</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>KeepAliveTimeout <em>seconds</em></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>KeepAliveTimeout 15</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Core</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>core</td></tr></table></td></tr></table>
<p>The number of seconds Apache will wait for a subsequent
request before closing the connection. Once a request has been
received, the timeout value specified by the
<a href="#timeout" class="directive"><code class="directive">Timeout</code></a> directive applies.</p>
<p>Setting <code class="directive">KeepAliveTimeout</code> 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>
<hr/><h2><a name="Limit"><Limit></a> <a name="limit">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Restrict access controls to only certain HTTP
methods</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><Limit <em>method</em> [<em>method</em>] ... > ...
</Limit></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host, directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Core</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>core</td></tr></table></td></tr></table>
<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
<code class="directive"><limit></code> section.</strong></p>
<p>The purpose of the <code class="directive"><Limit></code>
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 <code><Limit></code>
bracket <strong>will have no effect</strong>. The following
example applies the access control only to the methods POST, PUT,
and DELETE, leaving all other methods unprotected:</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
<code><Limit POST PUT DELETE><br>
Require valid-user<br>
</Limit></code>
</code></td></tr></table></blockquote>
<p>The method names listed can be one or more of: GET, POST, PUT,
DELETE, CONNECT, OPTIONS, TRACE, PATCH, PROPFIND, PROPPATCH,
MKCOL, COPY, MOVE, LOCK, and UNLOCK. <strong>The method name is
case-sensitive.</strong> If GET is used it will also restrict
HEAD requests.</p>
<hr/><h2><a name="LimitExcept"><LimitExcept></a> <a name="limitexcept">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Restrict access controls to all HTTP methods
except the named ones</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><LimitExcept <em>method</em> [<em>method</em>] ... > ...
</LimitExcept></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host, directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Core</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>core</td></tr></table></td></tr></table>
<p><code class="directive"><LimitExcept></code> and
<code></LimitExcept></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 <a href="#limit" class="directive"><code class="directive"><Limit></code></a> section and can be used to control
both standard and nonstandard/unrecognized methods. See the
documentation for <a href="#limit" class="directive"><code class="directive"><Limit></code></a> for more details.</p>
<p>For example:</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
<LimitExcept POST GET><br>
Require valid-user<br>
<LimitExcept>
</code></td></tr></table></blockquote>
<hr/><h2><a name="LimitRequestBody">LimitRequestBody</a> <a name="limitrequestbody">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Restricts the total size of the HTTP request body sent
from the client</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>LimitRequestBody <em>bytes</em></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>LimitRequestBody 0</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host, directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Core</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>core</td></tr></table></td></tr></table>
<p>This directive specifies the number of <em>bytes</em> from 0
(meaning unlimited) to 2147483647 (2GB) that are allowed in a
request body. The default value is defined by the compile-time
constant <code>DEFAULT_LIMIT_REQUEST_BODY</code> (0 as
distributed).</p>
<p>The <code class="directive">LimitRequestBody</code> 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 passing form information to the
server. Implementations of the PUT 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 wich to limit the size of the uploaded file to 100K,
you might use the following directive:</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
LimitRequestBody 102400
</code></td></tr></table></blockquote>
<hr/><h2><a name="LimitRequestFields">LimitRequestFields</a> <a name="limitrequestfields">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Limits the number of HTTP request header fields that
will be accepted from the client</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>LimitRequestFields <em>number</em></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>LimitRequestFields 100</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Core</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>core</td></tr></table></td></tr></table>
<p><em>Number</em> is an integer from 0 (meaning unlimited) to
32767. The default value is defined by the compile-time
constant <code>DEFAULT_LIMIT_REQUEST_FIELDS</code> (100 as
distributed).</p>
<p>The <code class="directive">LimitRequestFields</code> 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>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
LimitRequestFields 50
</code></td></tr></table></blockquote>
<hr/><h2><a name="LimitRequestFieldSize">LimitRequestFieldSize</a> <a name="limitrequestfieldsize">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Limits the size of the HTTP request header allowed from the
client</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>LimitRequestFieldsize <em>bytes</em></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>LimitRequestFieldsize 8190</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Core</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>core</td></tr></table></td></tr></table>
<p>This directive specifies the number of <em>bytes</em> from 0
to the value of the compile-time constant
<code>DEFAULT_LIMIT_REQUEST_FIELDSIZE</code> (8190 as
distributed) that will be allowed in an HTTP request
header.</p>
<p>The <code class="directive">LimitRequestFieldsize</code> directive
allows the server administrator to reduce the limit on the allowed
size of an HTTP request header field below the normal input buffer
size compiled with the server. 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.</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>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
LimitRequestFieldSize 16380
</code></td></tr></table></blockquote>
<blockquote><table><tr><td bgcolor="#e0e5f5">Under normal conditions, the value should not be changed from
the default.</td></tr></table></blockquote>
<hr/><h2><a name="LimitRequestLine">LimitRequestLine</a> <a name="limitrequestline">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Limit the size of the HTTP request line that will be accepted
from the client</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>LimitRequestLine <em>bytes</em></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>LimitRequestLine 8190</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Core</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>core</td></tr></table></td></tr></table>
<p>This directive sets the number of <em>bytes</em> from 0 to
the value of the compile-time constant
<code>DEFAULT_LIMIT_REQUEST_LINE</code> (8190 as distributed)
that will be allowed on the HTTP request-line.</p>
<p>The <code class="directive">LimitRequestLine</code> directive allows
the server administrator to reduce the limit on the allowed size
of a client's HTTP request-line below the normal input buffer size
compiled with the server. Since the request-line consists of the
HTTP method, URI, and protocol version, the
<code class="directive">LimitRequestLine</code> 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 GET 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>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
LimitRequestLine 16380
</code></td></tr></table></blockquote>
<blockquote><table><tr><td bgcolor="#e0e5f5">Under normal conditions, the value should not be changed from
the default.</td></tr></table></blockquote>
<hr/><h2><a name="LimitXMLRequestBody">LimitXMLRequestBody</a> <a name="limitxmlrequestbody">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Limits the size of an XML-based request body</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>LimitXMLRequestBody <em>number</em></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>LimitXMLRequestBody 1000000</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Core</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>core</td></tr></table></td></tr></table>
<p>Limit (in bytes) on maximum size of an XML-based request
body. A value of <code>0</code> will disable any checking.</p>
<p>Example:</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
LimitXMLRequestBody 0
</code></td></tr></table></blockquote>
<hr/><h2><a name="Location"><Location></a> <a name="location">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Applies the enclosed directives only to matching
URLs</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><Location
URL-path|URL> ... </Location></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Core</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>core</td></tr></table></td></tr></table>
<p>The <code class="directive"><Location></code> directive
provides for access control by URL. It is similar to the
<a href="#directory" class="directive"><code class="directive"><Directory></code></a>
directive, and starts a subsection which is terminated with a
<code></Location></code> directive. <code class="directive"><Location></code> sections are processed in the
order they appear in the configuration file, after the <a href="#directory" class="directive"><code class="directive"><Directory></code></a> sections and
<code>.htaccess</code> files are read, and after the <a href="#files" class="directive"><code class="directive"><Files></code></a> sections.</p>
<p>Note that URLs do not have to line up with the filesystem at
all, it should be emphasized that <Location> operates
completely outside the filesystem.</p>
<p>For all origin (non-proxy) requests, the URL to be matched is a
URL-path of the form <code>/path/</code>. No scheme, hostname,
port, or query string may be included. 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, `?' matches
any single character, and `*' matches any sequences of
characters.</p>
<p>Extended regular
expressions can also be used, with the addition of the
<code>~</code> character. For example:</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
<Location ~ "/(extra|special)/data">
</code></td></tr></table></blockquote>
<p>would match URLs that contained the substring "/extra/data" or
"/special/data". In Apache 1.3 and above, a new directive
<a href="#locationmatch" class="directive"><code class="directive"><LocationMatch></code></a>
exists which behaves identical to the regex version of
<code class="directive"><Location></code>.</p>
<p>The <code class="directive"><Location></code>
functionality is especially useful when combined with the
<a href="#sethandler" class="directive"><code class="directive">SetHandler</code></a>
directive. For example, to enable status requests, but allow them
only from browsers at foo.com, you might use:</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
<Location /status><br>
SetHandler server-status<br>
Order Deny,Allow<br>
Deny from all<br>
Allow from .foo.com<br>
</Location>
</code></td></tr></table></blockquote>
<blockquote><table><tr><td bgcolor="#e0e5f5"><p align="center"><strong>Note about / (slash)</strong></p> <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. The <a href="#locationmatch" class="directive"><code class="directive"><LocationMatch></code></a> directive and the regex
version of <code class="directive"><Location></code> require you
to explicitly specify multiple slashes if that is your intention. For
example, <code><LocationMatch ^/abc></code> would match the
request URL <code>/abc</code> but not the request URL
<code>//abc</code>. The (non-regex) <code class="directive"><Location></code> directive behaves similarly when
used for proxy requests. But when (non-regex) <code class="directive"><Location></code> is used for non-proxy requests it
will implicitly match multiple slashes with a single slash. For
example, if you specify <code><Location /abc/def></code> and the
request is to <code>/abc//def</code> then it will match.</p>
</td></tr></table></blockquote>
<p><strong>See also </strong></p><ul><li><a href="../sections.html">How
Directory, Location and Files sections work</a> for an
explanation of how these different sections are combined when a
request is received</li></ul><hr/><h2><a name="LocationMatch"><LocationMatch></a> <a name="locationmatch">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Applies the enclosed directives only to regular-expression
matching URLs</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><LocationMatch
<em>regex</em>> ... </Location></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Core</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>core</td></tr></table></td></tr></table>
<p>The <code class="directive"><LocationMatch></code> directive
provides for access control by URL, in an identical manner to
<a href="#location" class="directive"><code class="directive"><Location></code></a>. However, it takes a regular
expression as an argument instead of a simple string. For
example:</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
<LocationMatch "/(extra|special)/data">
</code></td></tr></table></blockquote>
<p>would match URLs that contained the substring "/extra/data"
or "/special/data".</p>
<p><strong>See also </strong></p><ul><li><a href="../sections.html">How
Directory, Location and Files sections work</a> for an
explanation of how these different sections are combined when a
request is received</li></ul><hr/><h2><a name="LogLevel">LogLevel</a> <a name="loglevel">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Controls the verbosity of the ErrorLog</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>LogLevel <em>level</em></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>LogLevel warn</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Core</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>core</td></tr></table></td></tr></table>
<p><code class="directive">LogLevel</code> adjusts the verbosity of the
messages recorded in the error logs (see <a href="#errorlog" class="directive"><code class="directive">ErrorLog</code></a> directive). The following
<em>level</em>s are available, in order of decreasing
significance:</p>
<table border="1">
<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>
</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>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>LogLevel notice</code></td></tr></table></blockquote>
<hr/><h2><a name="MaxKeepAliveRequests">MaxKeepAliveRequests</a> <a name="maxkeepaliverequests">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Sets the number of requests allowed on a persistent
connection</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>MaxKeepAliveRequests <em>number</em></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>MaxKeepAliveRequests 100</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Core</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>core</td></tr></table></td></tr></table>
<p>The <code class="directive">MaxKeepAliveRequests</code> directive
limits the number of requests allowed per connection when
<a href="#keepalive" class="directive"><code class="directive">KeepAlive</code></a> 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>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>MaxKeepAliveRequests 500</code></td></tr></table></blockquote>
<hr/><h2><a name="NameVirtualHost">NameVirtualHost</a> <a name="namevirtualhost">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Configures an IP address for name-virtual
hosting</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>NameVirtualHost <em>addr</em>[:<em>port</em>]</td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Core</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>core</td></tr></table></td></tr></table>
<p>The <code class="directive">NameVirtualHost</code> directive is a
required directive if you want to configure <a href="../vhosts/">name-based virtual hosts</a>.</p>
<p>Although <em>addr</em> can be hostname it is recommended
that you always use an IP address, <em>e.g.</em></p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>NameVirtualHost 111.22.33.44</code></td></tr></table></blockquote>
<p>With the <code class="directive">NameVirtualHost</code> directive you
specify the IP address on which the server will receive requests
for the name-based virtual hosts. This will usually be the address
to which your name-based virtual host names resolve. In cases
where a firewall or other proxy receives the requests and forwards
them on a different IP address to the server, you must specify the
IP address of the physical interface on the machine which will be
servicing the requests. If you have multiple name-based hosts on
multiple addresses, repeat the directive for each address.</p>
<p>Note: the "main server" and any _default_ servers will
<strong>never</strong> be served for a request to a
<code class="directive">NameVirtualHost</code> IP Address (unless for some
reason you specify <code class="directive">NameVirtualHost</code> but then
don't define any VirtualHosts for that address).</p>
<p>Optionally you can specify a port number on which the
name-based virtual hosts should be used, <em>e.g.</em></p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>NameVirtualHost 111.22.33.44:8080</code></td></tr></table></blockquote>
<p>IPv6 addresses must be enclosed in square brackets, as shown
in the following example:</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>NameVirtualHost [fe80::a00:20ff:fea7:ccea]:8080</code></td></tr></table></blockquote>
<p><strong>See also </strong></p><ul><li>See also: <a href="../vhosts/">Virtual Hosts
documentation</a></li></ul><hr/><h2><a name="Options">Options</a> <a name="options">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Configures what features are available in a particular
directory</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>Options
[+|-]<em>option</em> [[+|-]<em>option</em>] ...</td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>Options All</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host, directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>Options</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Core</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>core</td></tr></table></td></tr></table>
<p>The <code class="directive">Options</code> directive controls which
server features are available in a particular directory.</p>
<p><em>option</em> 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>All</dt>
<dd>All options except for MultiViews. This is the default
setting.</dd>
<dt>ExecCGI</dt>
<dd>
Execution of CGI scripts is permitted.</dd>
<dt>FollowSymLinks</dt>
<dd>
The server will follow symbolic links in this directory.<br>
<strong>Note</strong>: even though the server follows the
symlink it does <em>not</em> change the pathname used to match
against <a href="#directory" class="directive"><code class="directive"><Directory></code></a> sections.<br>
<strong>Note</strong>: this option gets ignored if set inside a
<a href="#location" class="directive"><code class="directive"><Location></code></a>
section.</dd>
<dt>Includes</dt>
<dd>
Server-side includes are permitted.</dd>
<dt>IncludesNOEXEC</dt>
<dd>
Server-side includes are permitted, but the #exec command and
#exec CGI are disabled. It is still possible to #include
virtual CGI scripts from ScriptAliase'd directories.</dd>
<dt>Indexes</dt>
<dd>
If a URL which maps to a directory is requested, and the
there is no DirectoryIndex (<em>e.g.</em>, index.html) in
that directory, then the server will return a formatted
listing of the directory.</dd>
<dt>MultiViews</dt>
<dd>
<a href="../content-negotiation.html">Content negotiated</a>
MultiViews are allowed.</dd>
<dt>SymLinksIfOwnerMatch</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.<br> <strong>Note</strong>: this option gets ignored if set inside
a <a href="#location" class="directive"><code class="directive"><Location></code></a>
section.</dd>
</dl>
<p>Normally, if multiple <code class="directive">Options</code> could apply to a
directory, then the most specific one is taken complete; the
options are not merged. However if <em>all</em> the options on
the <code class="directive">Options</code> directive are preceded by a + or -
symbol, the options are merged. Any options preceded by a + are
added to the options currently in force, and any options
preceded by a - are removed from the options currently in
force. </p>
<p>For example, without any + and - symbols:</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code><Directory /web/docs><br>
Options Indexes FollowSymLinks<br>
</Directory><br>
<Directory /web/docs/spec><br>
Options Includes<br>
</Directory>
</code></td></tr></table></blockquote>
<p>then only <code>Includes</code> will be set for the
/web/docs/spec directory. However if the second
<code class="directive">Options</code> directive uses the + and - symbols:</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
<Directory /web/docs><br>
Options Indexes FollowSymLinks<br>
</Directory><br>
<Directory /web/docs/spec><br>
Options +Includes -Indexes<br>
</Directory>
</code></td></tr></table></blockquote>
<p>then the options <code>FollowSymLinks</code> and
<code>Includes</code> are set for the /web/docs/spec directory.</p>
<p><strong>Note:</strong> Using <code>-IncludesNOEXEC</code> or
<code>-Includes</code> disables server-side includes completely
regardless of the previous setting.</p>
<p>The default in the absence of any other settings is
<code>All</code>.</p>
<hr/><h2><a name="Require">Require</a> <a name="require">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Selects which authenticated users can access
a resource</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>Require <em>entity-name</em> [<em>entity-name</em>] ...</td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>AuthConfig</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Core</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>core</td></tr></table></td></tr></table>
<p>This directive selects which authenticated users can access
a directory. The allowed syntaxes are:</p>
<ul>
<li>
Require user <em>userid</em> [<em>userid</em>] ...
<p>Only the named users can access the directory.</p>
</li>
<li>
Require group <em>group-name</em> [<em>group-name</em>] ...
<p>Only users in the named groups can access the
directory.</p>
</li>
<li>
Require valid-user
<p>All valid users can access the directory.</p>
</li>
</ul>
<p><code class="directive">Require</code> must be accompanied by
<a href="#authname" class="directive"><code class="directive">AuthName</code></a> and <a href="#authtype" class="directive"><code class="directive">AuthType</code></a> directives, and directives such
as <a href="mod_auth.html#authuserfile" class="directive"><code class="directive">AuthUserFile</code></a>
and <a href="mod_auth.html#authgroupfile" class="directive"><code class="directive">AuthGroupFile</code></a> (to
define users and groups) in order to work correctly. Example:</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
AuthType Basic<br>
AuthName "Restricted Directory"<br>
AuthUserFile /web/users<br>
AuthGroupFile /web/groups<br>
Require group admin<br>
</code></td></tr></table></blockquote>
<p>Access controls which are applied in this way are effective for
<strong>all</strong> methods. <strong>This is what is normally
desired.</strong> If you wish to apply access controls only to
specific methods, while leaving other methods unprotected, then
place the <code class="directive">Require</code> statement into a
<a href="#limit" class="directive"><code class="directive"><Limit></code></a>
section.</p>
<p><strong>See also </strong></p><ul><li><a href="#satisfy" class="directive"><code class="directive">Satisfy</code></a></li><li><code><a href="mod_access.html">mod_access</a></code></li></ul><hr/><h2><a name="RLimitCPU">RLimitCPU</a> <a name="rlimitcpu">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Limits the CPU consumption of processes launched
by Apache children</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>RLimitCPU <em>number</em>|max [<em>number</em>|max]</td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>Unset; uses operating system defaults</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Core</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>core</td></tr><tr><td align="left" valign="top"><a href="directive-dict.html#Compatibility" class="help">Compatibility:</a></td><td>Moved in version 2.0 to
the MPMs</td></tr></table></td></tr></table>
<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 <em>max</em> 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 root, or in the initial startup
phase.</p>
<p>This applies to processes forked off from Apache children
servicing requests, not the Apache children themselves. This
includes CGI scripts and SSI exec commands, but not any
processes forked off from the Apache parent such as piped
logs.</p>
<p>CPU resource limits are expressed in seconds per
process.</p>
<p><strong>See also </strong></p><ul><li><a href="#rlimitmem" class="directive"><code class="directive">RLimitMEM</code></a></li><li><a href="#rlimitnproc" class="directive"><code class="directive">RLimitNPROC</code></a></li></ul><hr/><h2><a name="RLimitMEM">RLimitMEM</a> <a name="rlimitmem">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Limits the memory consumption of processes launched
by Apache children</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>RLimitMEM <em>number</em>|max [<em>number</em>|max]</td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>Unset; uses operating system defaults</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Core</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>core</td></tr><tr><td align="left" valign="top"><a href="directive-dict.html#Compatibility" class="help">Compatibility:</a></td><td>Moved in version 2.0 to the MPMs.</td></tr></table></td></tr></table>
<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 <em>max</em> 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 root, or in the initial startup
phase.</p>
<p>This applies to processes forked off from Apache children
servicing requests, not the Apache children themselves. This
includes CGI scripts and SSI exec commands, but not any
processes forked off from the Apache parent such as piped
logs.</p>
<p>Memory resource limits are expressed in bytes per
process.</p>
<p><strong>See also </strong></p><ul><li><a href="#rlimitcpu" class="directive"><code class="directive">RLimitCPU</code></a></li><li><a href="#rlimitnproc" class="directive"><code class="directive">RLimitNPROC</code></a></li></ul><hr/><h2><a name="RLimitNPROC">RLimitNPROC</a> <a name="rlimitnproc">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Limits the number of processes that can be launched by
processes launched by Apache children</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>RLimitNPROC <em>number</em>|max [<em>number</em>|max]</td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>Unset; uses operating system defaults</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Core</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>core</td></tr><tr><td align="left" valign="top"><a href="directive-dict.html#Compatibility" class="help">Compatibility:</a></td><td>Moved in version 2.0 to the MPMs.</td></tr></table></td></tr></table>
<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 root, or in the initial startup
phase.</p>
<p>This applies to processes forked off from Apache children
servicing requests, not the Apache children themselves. This
includes CGI scripts and SSI exec commands, but not any
processes forked off from the Apache parent such as piped
logs.</p>
<p>Process limits control the number of processes per user.</p>
<p>Note: If CGI processes are <strong>not</strong> running
under userids other than the web server userid, this directive
will limit the number of processes that the server itself can
create. Evidence of this situation will be indicated by
<strong><em>cannot fork</em></strong> messages in the
error_log.</p>
<p><strong>See also </strong></p><ul><li><a href="#rlimitmem" class="directive"><code class="directive">RLimitMEM</code></a></li><li><a href="#rlimitcpu" class="directive"><code class="directive">RLimitCPU</code></a></li></ul><hr/><h2><a name="Satisfy">Satisfy</a> <a name="satisfy">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Configures how host-level access control and user authentication
interact</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>Satisfy any|all</td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>Satisfy all</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Core</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>core</td></tr></table></td></tr></table>
<p>Access policy if both <a href="#allow" class="directive"><code class="directive">Allow</code></a> and <a href="#require" class="directive"><code class="directive">Require</code></a> used. The parameter can be
either <em>'all'</em> or <em>'any'</em>. This directive is only
useful if access to a particular area is being restricted by both
username/password <em>and</em> client host address. In this case
the default behavior ("all") is to require that the client passes
the address access restriction <em>and</em> enters a valid
username and password. With the "any" option the client will be
granted access if they either pass the host restriction or enter a
valid username and password. This can be used to password restrict
an area, but to let clients from particular addresses in without
prompting for a password.</p>
<p>For example, if you wanted to let people on your network have
unrestricted access to a portion of your website, but require that
people outside of your network provide a password, you could use a
configuration similar to the following:</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
Require valid-user<br>
Allow from 192.168.1<br>
Satisfy any
</code></td></tr></table></blockquote>
<p><strong>See also </strong></p><ul><li><a href="mod_access.html#allow" class="directive"><code class="directive">Allow</code></a></li><li><a href="#require" class="directive"><code class="directive">Require</code></a></li></ul><hr/><h2><a name="ScriptInterpreterSource">ScriptInterpreterSource</a> <a name="scriptinterpretersource">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Controls how the interpreter for CGI scripts is
located</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>ScriptInterpreterSource registry|script</td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>ScriptInterpreterSource script</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Core</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>core</td></tr><tr><td align="left" valign="top"><a href="directive-dict.html#Compatibility" class="help">Compatibility:</a></td><td>Win32 only</td></tr></table></td></tr></table>
<p>This directive is used to control how Apache finds the
interpreter used to run CGI scripts. The default technique is to
use the interpreter pointed to by the #! line in the
script. Setting <code>ScriptInterpreterSource registry</code> will
cause the Windows Registry to be searched using the script file
extension (e.g., .pl) as a search key.</p>
<hr/><h2><a name="ServerAdmin">ServerAdmin</a> <a name="serveradmin">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Sets the email address that the server includes in error
messages sent to the client</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>ServerAdmin <em>email-address</em></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Core</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>core</td></tr></table></td></tr></table>
<p>The <code class="directive">ServerAdmin</code> sets the e-mail address
that the server includes in any error messages it returns to the
client.</p>
<p>It may be worth setting up a dedicated address for this,
<em>e.g.</em></p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>ServerAdmin www-admin@foo.bar.com</code></td></tr></table></blockquote>
<p>as users do not always mention that they are talking about the
server!</p>
<hr/><h2><a name="ServerAlias">ServerAlias</a> <a name="serveralias">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Sets alternate names for a host used when matching requests
to name-virtual hosts</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>ServerAlias <em>hostname</em> [<em>hostname</em>] ...</td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>virtual host</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Core</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>core</td></tr></table></td></tr></table>
<p>The <code class="directive">ServerAlias</code> directive sets the
alternate names for a host, for use with <a href="../vhosts/name-based.html">name-based virtual hosts</a>.</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
<VirtualHost *><br>
ServerName server.domain.com<br>
ServerAlias server server2.domain.com server2<br>
...<br>
</VirtualHost>
</code></td></tr></table></blockquote>
<p><strong>See also </strong></p><ul><li><a href="../vhosts/">Apache Virtual Host documentation</a></li></ul><hr/><h2><a name="ServerName">ServerName</a> <a name="servername">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Sets the hostname and port that the server uses to identify
itself</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>ServerName <em>fully-qualified-domain-name[:port]</em></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Core</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>core</td></tr><tr><td align="left" valign="top"><a href="directive-dict.html#Compatibility" class="help">Compatibility:</a></td><td>In version 2.0, this
directive supersedes the functionality of the Port
directive from version 1.3.</td></tr></table></td></tr></table>
<p>The <code class="directive">ServerName</code> directive sets the hostname and
port that the server uses to identify itself. This is used when
creating redirection URLs. For example, if the name of the
machine hosting the webserver is <code>simple.example.com</code>,
but the machine also has the DNS alias <code>www.example.com</code>
and you wish the webserver to be so identified, the following
directive should be used:</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>ServerName www.example.com:80</code></td></tr></table></blockquote>
<p>If no <code class="directive">ServerName</code> is specified, then the
server attempts to deduce the hostname by performing a reverse
lookup on the IP address. If no port is specified in the
servername, 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
<code class="directive">ServerName</code> directive.</p>
<p>If you are using <a href="../vhosts/name-based.html">name-based virtual hosts</a>,
the <code class="directive">ServerName</code> inside a
<a href="#virtualhost" class="directive"><code class="directive"><VirtualHost></code></a>
section specifies what hostname must appear in the request's
<code>Host:</code> header to match this virtual host.</p>
<p>See the description of the
<a href="#usecanonicalname" class="directive"><code class="directive">UseCanonicalName</code></a> directive for
settings which determine whether self-referential URL's (e.g., by the
<code><a href="mod_dir.html">mod_dir</a></code> module) will refer to the
specified port, or to the port number given in the client's request.
</p>
<p><strong>See also </strong></p><ul><li><a href="../dns-caveats.html">DNS Issues</a></li><li><a href="../vhosts/">Apache virtual host
documentation</a></li><li><a href="#usecanonicalname" class="directive"><code class="directive">UseCanonicalName</code></a></li><li><a href="#namevirtualhost" class="directive"><code class="directive">NameVirtualHost</code></a></li><li><a href="#serveralias" class="directive"><code class="directive">ServerAlias</code></a></li></ul><hr/><h2><a name="ServerPath">ServerPath</a> <a name="serverpath">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Sets the legacy URL pathname for a name-virtual host that
is accessed by an incompatible browser</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>ServerPath <em>directory-path</em></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>virtual host</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Core</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>core</td></tr></table></td></tr></table>
<p>The <code class="directive">ServerPath</code> directive sets the legacy
URL pathname for a host, for use with <a href="../vhosts/">name-based virtual hosts</a>.</p>
<p><strong>See also </strong></p><ul><li><a href="../vhosts/">Apache Virtual Host documentation</a></li></ul><hr/><h2><a name="ServerRoot">ServerRoot</a> <a name="serverroot">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Sets the base directory for the server installation</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>ServerRoot <em>directory-path</em></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>ServerRoot /usr/local/apache</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Core</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>core</td></tr></table></td></tr></table>
<p>The <code class="directive">ServerRoot</code> directive sets the
directory in which the server lives. Typically it will contain the
subdirectories <code>conf/</code> and <code>logs/</code>. Relative
paths for other configuration files are taken as relative to this
directory.</p>
<p><strong>See also </strong></p><ul><li><a href="../invoking.html">the <code>-d</code>
option to <code>httpd</code></a></li><li><a href="../misc/security_tips.html#serverroot">the
security tips</a> for information on how to properly set
permissions on the ServerRoot</li></ul><hr/><h2><a name="ServerSignature">ServerSignature</a> <a name="serversignature">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Configures the footer on server-generated documents</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>ServerSignature On|Off|EMail</td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>ServerSignature Off</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host, directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Core</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>core</td></tr></table></td></tr></table>
<p>The <code class="directive">ServerSignature</code> directive allows the
configuration of a trailing footer line under server-generated
documents (error messages, mod_proxy ftp directory listings,
mod_info 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.<br> The <code>Off</code>
setting, which is the default, suppresses the error line (and is
therefore compatible with the behavior of Apache-1.2 and
below). The <code>On</code> setting simply adds a line with the
server version number and <a href="#servername" class="directive"><code class="directive">ServerName</code></a> of the serving virtual host,
and the <code>EMail</code> setting additionally creates a
"mailto:" reference to the <a href="#serveradmin" class="directive"><code class="directive">ServerAdmin</code></a> of the referenced
document.</p>
<hr/><h2><a name="ServerTokens">ServerTokens</a> <a name="servertokens">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Configures the Server HTTP response header</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>ServerTokens Minimal|ProductOnly|OS|Full</td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>ServerTokens Full</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Core</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>core</td></tr></table></td></tr></table>
<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 Prod[uctOnly]</code></dt>
<dd>Server sends (<em>e.g.</em>): <code>Server:
Apache</code></dd>
<dt><code>ServerTokens Min[imal]</code></dt>
<dd>Server sends (<em>e.g.</em>): <code>Server:
Apache/1.3.0</code></dd>
<dt><code>ServerTokens OS</code></dt>
<dd>Server sends (<em>e.g.</em>): <code>Server: Apache/1.3.0
(Unix)</code></dd>
<dt><code>ServerTokens Full</code> (or not specified)</dt>
<dd>Server sends (<em>e.g.</em>): <code>Server: Apache/1.3.0
(Unix) PHP/3.0 MyMod/1.2</code></dd>
</dl>
<p>This setting applies to the entire server, and cannot be
enabled or disabled on a virtualhost-by-virtualhost basis.</p>
<hr/><h2><a name="SetHandler">SetHandler</a> <a name="sethandler">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Forces all matching files to be processed by a
handler</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>SetHandler <em>handler-name</em></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host, directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Core</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>core</td></tr><tr><td align="left" valign="top"><a href="directive-dict.html#Compatibility" class="help">Compatibility:</a></td><td>Moved into the core in Apache 2.0</td></tr></table></td></tr></table>
<p>When placed into an <code>.htaccess</code> file or a
<a href="#directory" class="directive"><code class="directive"><Directory></code></a> or
<a href="#location" class="directive"><code class="directive"><Location></code></a>
section, this directive forces all matching files to be parsed
through the <a href="../handler.html">handler</a> given by
<em>handler-name</em>. 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>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
SetHandler imap-file
</code></td></tr></table></blockquote>
<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 httpd.conf:</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
<Location /status><br>
SetHandler server-status<br>
</Location>
</code></td></tr></table></blockquote>
<hr/><h2><a name="SetInputFilter">SetInputFilter</a> <a name="setinputfilter">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Sets the filters that will process client requests and POST
input</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>SetInputFilter <em>filter</em>[<em>;filter</em>...]</td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host, directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Core</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>core</td></tr></table></td></tr></table>
<p>The <code class="directive">SetInputFilter</code> 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
<a href="mod_mime.html#addinputfilter" class="directive"><code class="directive">AddInputFilter</code></a>
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>
<p><strong>See also </strong></p><ul><li><a href="../filter.html">Filters</a> documentation</li></ul><hr/><h2><a name="SetOutputFilter">SetOutputFilter</a> <a name="setoutputfilter">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Sets the filters that will process responses from the
server</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>SetOutputFilter <em>filter</em> [<em>filter</em>] ...</td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host, directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Core</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>core</td></tr></table></td></tr></table>
<p>The <code class="directive">SetOutputFilter</code> 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
<a href="mod_mime.html#addoutputfilter" class="directive"><code class="directive">AddOutputFilter</code></a>
directive.</p>
<p>For example, the following configuration will process all files
in the <code>/www/data/</code> directory for server-side
includes.</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
<Directory /www/data/><br>
SetOutputFilter INCLUDES<br>
</Directory>
</code></td></tr></table></blockquote>
<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>
<p><strong>See also </strong></p><ul><li><a href="../filter.html">Filters</a> documentation</li></ul><hr/><h2><a name="TimeOut">TimeOut</a> <a name="timeout">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Defines the amount of time the server will wait for
certain events before failing a request</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>TimeOut <em>number</em></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>TimeOut 300</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Core</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>core</td></tr></table></td></tr></table>
<p>The <code class="directive">TimeOut</code> directive currently defines
the amount of time Apache will wait for three things:</p>
<ol>
<li>The total amount of time it takes to receive a GET
request.</li>
<li>The amount of time between receipt of TCP packets on a
POST or PUT request.</li>
<li>The amount of time between ACKs on transmissions of TCP
packets in responses.</li>
</ol>
<p>We plan on making these separately configurable at some point
down the road. The timer used to default to 1200 before 1.2,
but has been lowered to 300 which is still far more than
necessary in most situations. It is not set any lower by
default because there may still be odd places in the code where
the timer is not reset when a packet is sent. </p>
<hr/><h2><a name="UseCanonicalName">UseCanonicalName</a> <a name="usecanonicalname">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Configures how the server determines its own name and
port</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>UseCanonicalName on|off|dns</td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>UseCanonicalName on</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host, directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>Options</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Core</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>core</td></tr></table></td></tr></table>
<p>In many situations Apache has to construct a
<em>self-referential</em> URL. That is, a URL which refers back to
the same server. With <code>UseCanonicalName on</code> Apache will
use the hostname and port specified in the <a href="#servername" class="directive"><code class="directive">ServerName</code></a> directive to construct a 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 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). 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 will redirect them to
<code>http://www.domain.com/splat/</code>. If you have
authentication enabled, this will cause the user to have to
reauthenticate twice (once for <code>www</code> and once again
for <code>www.domain.com</code>). But if
<code class="directive">UseCanonicalName</code> is set off, then Apache 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 does a
reverse DNS lookup on the server IP address that the client
connected to in order to work out self-referential URLs.</p>
<p><strong>Warning:</strong> 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>
<p><strong>See also </strong></p><ul><li><a href="#servername" class="directive"><code class="directive">ServerName</code></a></li><li><a href="mpm_common.html#listen" class="directive"><code class="directive">Listen</code></a></li></ul><hr/><h2><a name="VirtualHost"><VirtualHost></a> <a name="virtualhost">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Contains directives that apply only to a specific
hostname or IP address</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td><VirtualHost
<em>addr</em>[:<em>port</em>] [<em>addr</em>[:<em>port</em>]]
...> ... </VirtualHost></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Core</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>core</td></tr></table></td></tr></table>
<p><code class="directive"><VirtualHost></code> and
<code></VirtualHost></code> are used to enclose a group of
directives which will apply only to a particular virtual host. Any
directive which 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 <code class="directive"><VirtualHost></code>
section. <em>Addr</em> can be</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.</li>
</ul>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><p align="center"><strong>Example</strong></p><code>
<VirtualHost 10.1.2.3><br>
ServerAdmin webmaster@host.foo.com<br>
DocumentRoot /www/docs/host.foo.com<br>
ServerName host.foo.com<br>
ErrorLog logs/host.foo.com-error_log<br>
TransferLog logs/host.foo.com-access_log<br>
</VirtualHost>
</code></td></tr></table></blockquote>
<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>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
<VirtualHost [fe80::a00:20ff:fea7:ccea]><br>
ServerAdmin webmaster@host.foo.com<br>
DocumentRoot /www/docs/host.foo.com<br>
ServerName host.foo.com<br>
ErrorLog logs/host.foo.com-error_log<br>
TransferLog logs/host.foo.com-access_log<br>
</VirtualHost>
</code></td></tr></table></blockquote>
<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), or with kernel patches like <a href="../misc/vif-info.html">VIF</a> (for SunOS(TM) 4.1.x)).</p>
<p>The special name <code>_default_</code> can be specified in
which case this virtual host will match any IP address that is
not explicitly listed in another virtual host. In the absence
of any _default_ virtual host the "main" server config,
consisting of all those definitions outside any VirtualHost
section, is used when no match occurs.</p>
<p>You can specify a <code>:port</code> to change the port that is
matched. If unspecified then it defaults to the same port as the
most recent <a href="mpm_common.html#listen" class="directive"><code class="directive">Listen</code></a>
statement of the main server. You may also specify <code>:*</code>
to match all ports on that address. (This is recommended when used
with <code>_default_</code>.)</p>
<p><strong>SECURITY</strong>: 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 logfiles are stored is writable by anyone other
than the user that starts the server.</p>
<p><strong>NOTE</strong>: The use of <code class="directive"><VirtualHost></code> does <strong>not</strong>
affect what addresses Apache listens on. You may need to ensure
that Apache is listening on the correct addresses using <a href="mpm_common.html#listen" class="directive"><code class="directive">Listen</code></a>.</p>
<p><strong>See also </strong></p><ul><li><a href="../vhosts/">Apache Virtual Host documentation</a></li><li><a href="../dns-caveats.html">Warnings about DNS and
Apache</a></li><li><a href="../bind.html">Setting
which addresses and ports Apache uses</a></li><li><a href="../sections.html">How
Directory, Location and Files sections work</a> for an
explanation of how these different sections are combined when a
request is received</li></ul><hr/></blockquote><h3 align="center">Apache HTTP Server Version 2.0</h3><a href="./"><img src="../images/index.gif" alt="Index"/></a><a href="../"><img src="../images/home.gif" alt="Home"/></a></body></html>
1.1 httpd-2.0/docs/manual/mod/directives.html.en
Index: directives.html.en
===================================================================
<html xmlns="http://www.w3.org/TR/xhtml1/strict"><head><title>Directive Index- Apache HTTP Server</title><link href="../style/manual.css" type="text/css" rel="stylesheet"/></head><body><blockquote><div align="center"><img src="../images/sub.gif" alt="[APACHE DOCUMENTATION]"/><h3>Apache HTTP Server Version 2.0</h3></div><h1 align="center">Directive Index</h1>
<p>
Each Apache directive available in the standard Apache
distribution is listed here. They are described using a
consistent format, and there is <a href="directive-dict.html" rel="Glossary">a dictionary</a> of the terms used in their
descriptions available.
</p>
<ul><li>AcceptMutex: </li><li><a href="prefork.html#acceptmutex">AcceptMutex</a></li><li>AcceptPathInfo: </li><li><a href="core.html#acceptpathinfo">AcceptPathInfo</a></li><li>AccessFileName: </li><li><a href="core.html#accessfilename">AccessFileName</a></li><li>Action: </li><li><a href="mod_actions.html#action">Action</a></li><li>AddAlt: </li><li><a href="mod_autoindex.html#addalt">AddAlt</a></li><li>AddAltByEncoding: </li><li><a href="mod_autoindex.html#addaltbyencoding">AddAltByEncoding</a></li><li>AddAltByType: </li><li><a href="mod_autoindex.html#addaltbytype">AddAltByType</a></li><li>AddCharset: </li><li><a href="mod_mime.html#addcharset">AddCharset</a></li><li>AddDefaultCharset: </li><li><a href="core.html#adddefaultcharset">AddDefaultCharset</a></li><li>AddDescription: </li><li><a href="mod_autoindex.html#adddescription">AddDescription</a></li><li>AddEncoding: </li><li><a href="mod_mime.html#addencoding">AddEncoding</a></li><li>AddHandler: </li><li><a href="mod_mime.html#addhandler">AddHandler</a></li><li>AddIcon: </li><li><a href="mod_autoindex.html#addicon">AddIcon</a></li><li>AddIconByEncoding: </li><li><a href="mod_autoindex.html#addiconbyencoding">AddIconByEncoding</a></li><li>AddIconByType: </li><li><a href="mod_autoindex.html#addiconbytype">AddIconByType</a></li><li>AddInputFilter: </li><li><a href="mod_mime.html#addinputfilter">AddInputFilter</a></li><li>AddLanguage: </li><li><a href="mod_mime.html#addlanguage">AddLanguage</a></li><li>AddModuleInfo: </li><li><a href="mod_info.html#addmoduleinfo">AddModuleInfo</a></li><li>AddOutputFilter: </li><li><a href="mod_mime.html#addoutputfilter">AddOutputFilter</a></li><li>AddType: </li><li><a href="mod_mime.html#addtype">AddType</a></li><li>Alias: </li><li><a href="mod_alias.html#alias">Alias</a></li><li>AliasMatch: </li><li><a href="mod_alias.html#aliasmatch">AliasMatch</a></li><li>Allow: </li><li><a href="mod_access.html#allow">Allow</a></li><li>AllowCONNECT: </li><li><a href="mod_proxy.html#allowconnect">AllowCONNECT</a></li><li>AllowOverride: </li><li><a href="core.html#allowoverride">AllowOverride</a></li><li>Anonymous: </li><li><a href="mod_auth_anon.html#anonymous">Anonymous</a></li><li>Anonymous_Authoritative: </li><li><a href="mod_auth_anon.html#anonymous_authoritative">Anonymous_Authoritative</a></li><li>Anonymous_LogEmail: </li><li><a href="mod_auth_anon.html#anonymous_logemail">Anonymous_LogEmail</a></li><li>Anonymous_MustGiveEmail: </li><li><a href="mod_auth_anon.html#anonymous_mustgiveemail">Anonymous_MustGiveEmail</a></li><li>Anonymous_NoUserID: </li><li><a href="mod_auth_anon.html#anonymous_nouserid">Anonymous_NoUserID</a></li><li>Anonymous_VerifyEmail: </li><li><a href="mod_auth_anon.html#anonymous_verifyemail">Anonymous_VerifyEmail</a></li><li>AssignUserId: </li><li><a href="perchild.html#assignuserid">AssignUserId</a></li><li>AuthAuthoritative: </li><li><a href="mod_auth.html#authauthoritative">AuthAuthoritative</a></li><li>AuthDBMAuthoritative: </li><li><a href="mod_auth_dbm.html#authdbmauthoritative">AuthDBMAuthoritative</a></li><li>AuthDBMGroupFile: </li><li><a href="mod_auth_dbm.html#authdbmgroupfile">AuthDBMGroupFile</a></li><li>AuthDBMType: </li><li><a href="mod_auth_dbm.html#authdbmtype">AuthDBMType</a></li><li>AuthDBMUserFile: </li><li><a href="mod_auth_dbm.html#authdbmuserfile">AuthDBMUserFile</a></li><li>AuthDigestAlgorithm: </li><li><a href="mod_auth_digest.html#authdigestalgorithm">AuthDigestAlgorithm</a></li><li>AuthDigestDomain: </li><li><a href="mod_auth_digest.html#authdigestdomain">AuthDigestDomain</a></li><li>AuthDigestFile: </li><li><a href="mod_auth_digest.html#authdigestfile">AuthDigestFile</a></li><li>AuthDigestGroupFile: </li><li><a href="mod_auth_digest.html#authdigestgroupfile">AuthDigestGroupFile</a></li><li>AuthDigestNcCheck: </li><li><a href="mod_auth_digest.html#authdigestnccheck">AuthDigestNcCheck</a></li><li>AuthDigestNonceFormat: </li><li><a href="mod_auth_digest.html#authdigestnonceformat">AuthDigestNonceFormat</a></li><li>AuthDigestNonceLifetime: </li><li><a href="mod_auth_digest.html#authdigestnoncelifetime">AuthDigestNonceLifetime</a></li><li>AuthDigestQop: </li><li><a href="mod_auth_digest.html#authdigestqop">AuthDigestQop</a></li><li>AuthGroupFile: </li><li><a href="mod_auth.html#authgroupfile">AuthGroupFile</a></li><li>AuthName: </li><li><a href="core.html#authname">AuthName</a></li><li>AuthType: </li><li><a href="core.html#authtype">AuthType</a></li><li>AuthUserFile: </li><li><a href="mod_auth.html#authuserfile">AuthUserFile</a></li><li>BrowserMatch: </li><li><a href="mod_setenvif.html#browsermatch">BrowserMatch</a></li><li>BrowserMatchNoCase: </li><li><a href="mod_setenvif.html#browsermatchnocase">BrowserMatchNoCase</a></li><li>CacheDefaultExpire: </li><li><a href="mod_cache.html#cachedefaultexpire">CacheDefaultExpire</a></li><li>CacheDisable: </li><li><a href="mod_cache.html#cachedisable">CacheDisable</a></li><li>CacheEnable: </li><li><a href="mod_cache.html#cacheenable">CacheEnable</a></li><li>CacheFile: </li><li><a href="mod_file_cache.html#cachefile">CacheFile</a></li><li>CacheIgnoreCacheControl: </li><li><a href="mod_cache.html#cacheignorecachecontrol">CacheIgnoreCacheControl</a></li><li>CacheIgnoreNoLastMod: </li><li><a href="mod_cache.html#cacheignorenolastmod">CacheIgnoreNoLastMod</a></li><li>CacheLastModifiedFactor: </li><li><a href="mod_cache.html#cachelastmodifiedfactor">CacheLastModifiedFactor</a></li><li>CacheMaxExpire: </li><li><a href="mod_cache.html#cachemaxexpire">CacheMaxExpire</a></li><li>CacheNegotiatedDocs: </li><li><a href="mod_negotiation.html#cachenegotiateddocs">CacheNegotiatedDocs</a></li><li>CacheOn: </li><li><a href="mod_cache.html#cacheon">CacheOn</a></li><li>CharsetDefault: </li><li><a href="mod_charset_lite.html#charsetdefault">CharsetDefault</a></li><li>CharsetOptions: </li><li><a href="mod_charset_lite.html#charsetoptions">CharsetOptions</a></li><li>CharsetSourceEnc: </li><li><a href="mod_charset_lite.html#charsetsourceenc">CharsetSourceEnc</a></li><li>CheckSpelling: </li><li><a href="mod_speling.html#checkspelling">CheckSpelling</a></li><li>ChildPerUserId: </li><li><a href="perchild.html#childperuserid">ChildPerUserId</a></li><li>ContentDigest: </li><li><a href="core.html#contentdigest">ContentDigest</a></li><li>CookieDomain: </li><li><a href="mod_usertrack.html#cookiedomain">CookieDomain</a></li><li>CookieExpires: </li><li><a href="mod_usertrack.html#cookieexpires">CookieExpires</a></li><li>CookieLog: </li><li><a href="mod_log_config.html#cookielog">CookieLog</a></li><li>CookieName: </li><li><a href="mod_usertrack.html#cookiename">CookieName</a></li><li>CookieStyle: </li><li><a href="mod_usertrack.html#cookiestyle">CookieStyle</a></li><li>CookieTracking: </li><li><a href="mod_usertrack.html#cookietracking">CookieTracking</a></li><li>CoreDumpDirectory: mpm_common</li><li>CoreDumpDirectory: mpm_common</li><li>CoreDumpDirectory: mpm_common</li><li>CoreDumpDirectory: mpm_common</li><li>CoreDumpDirectory: </li><li><a href="mpm_common.html#coredumpdirectory">CoreDumpDirectory</a></li><li>CustomLog: </li><li><a href="mod_log_config.html#customlog">CustomLog</a></li><li>Dav: </li><li><a href="mod_dav.html#dav">Dav</a></li><li>DavDepthInfinity: </li><li><a href="mod_dav.html#davdepthinfinity">DavDepthInfinity</a></li><li>DavLockDB: </li><li><a href="mod_dav.html#davlockdb">DavLockDB</a></li><li>DavMinTimeout: </li><li><a href="mod_dav.html#davmintimeout">DavMinTimeout</a></li><li>DefaultIcon: </li><li><a href="mod_autoindex.html#defaulticon">DefaultIcon</a></li><li>DefaultLanguage: </li><li><a href="mod_mime.html#defaultlanguage">DefaultLanguage</a></li><li>DefaultType: </li><li><a href="core.html#defaulttype">DefaultType</a></li><li>DeflateBufferSize: </li><li><a href="mod_deflate.html#deflatebuffersize">DeflateBufferSize</a></li><li>DeflateFilterNote: </li><li><a href="mod_deflate.html#deflatefilternote">DeflateFilterNote</a></li><li>DeflateMemLevel: </li><li><a href="mod_deflate.html#deflatememlevel">DeflateMemLevel</a></li><li>DeflateWindowSize: </li><li><a href="mod_deflate.html#deflatewindowsize">DeflateWindowSize</a></li><li>Deny: </li><li><a href="mod_access.html#deny">Deny</a></li><li>Directory: </li><li><a href="core.html#directory">Directory</a></li><li>DirectoryIndex: </li><li><a href="mod_dir.html#directoryindex">DirectoryIndex</a></li><li>DirectoryMatch: </li><li><a href="core.html#directorymatch">DirectoryMatch</a></li><li>DocumentRoot: </li><li><a href="core.html#documentroot">DocumentRoot</a></li><li>EnableMMAP: </li><li><a href="core.html#enablemmap">EnableMMAP</a></li><li>ErrorDocument: </li><li><a href="core.html#errordocument">ErrorDocument</a></li><li>ErrorLog: </li><li><a href="core.html#errorlog">ErrorLog</a></li><li>Example: </li><li><a href="mod_example.html#example">Example</a></li><li>ExpiresActive: </li><li><a href="mod_expires.html#expiresactive">ExpiresActive</a></li><li>ExpiresByType: </li><li><a href="mod_expires.html#expiresbytype">ExpiresByType</a></li><li>ExpiresDefault: </li><li><a href="mod_expires.html#expiresdefault">ExpiresDefault</a></li><li>ExtendedStatus: </li><li><a href="mod_status.html#extendedstatus">ExtendedStatus</a></li><li>ExtFilterDefine: </li><li><a href="mod_ext_filter.html#extfilterdefine">ExtFilterDefine</a></li><li>ExtFilterOptions: </li><li><a href="mod_ext_filter.html#extfilteroptions">ExtFilterOptions</a></li><li>FileETag: </li><li><a href="core.html#fileetag">FileETag</a></li><li>Files: </li><li><a href="core.html#files">Files</a></li><li>FilesMatch: </li><li><a href="core.html#filesmatch">FilesMatch</a></li><li>ForceLanguagePriority: </li><li><a href="mod_negotiation.html#forcelanguagepriority">ForceLanguagePriority</a></li><li>ForceType: </li><li><a href="core.html#forcetype">ForceType</a></li><li>Group: mpm_common</li><li>Group: mpm_common</li><li>Group: </li><li><a href="mpm_common.html#group">Group</a></li><li>Header: </li><li><a href="mod_headers.html#header">Header</a></li><li>HeaderName: </li><li><a href="mod_autoindex.html#headername">HeaderName</a></li><li>HostnameLookups: </li><li><a href="core.html#hostnamelookups">HostnameLookups</a></li><li>IdentityCheck: </li><li><a href="core.html#identitycheck">IdentityCheck</a></li><li>IfDefine: </li><li><a href="core.html#ifdefine">IfDefine</a></li><li>IfModule: </li><li><a href="core.html#ifmodule">IfModule</a></li><li>ImapBase: </li><li><a href="mod_imap.html#imapbase">ImapBase</a></li><li>ImapDefault: </li><li><a href="mod_imap.html#imapdefault">ImapDefault</a></li><li>ImapMenu: </li><li><a href="mod_imap.html#imapmenu">ImapMenu</a></li><li>Include: </li><li><a href="core.html#include">Include</a></li><li>IndexIgnore: </li><li><a href="mod_autoindex.html#indexignore">IndexIgnore</a></li><li>IndexOptions: </li><li><a href="mod_autoindex.html#indexoptions">IndexOptions</a></li><li>IndexOrderDefault: </li><li><a href="mod_autoindex.html#indexorderdefault">IndexOrderDefault</a></li><li>ISAPIAppendLogToErrors: </li><li><a href="mod_isapi.html#isapiappendlogtoerrors">ISAPIAppendLogToErrors</a></li><li>ISAPIAppendLogToQuery: </li><li><a href="mod_isapi.html#isapiappendlogtoquery">ISAPIAppendLogToQuery</a></li><li>ISAPIFileChache: </li><li><a href="mod_isapi.html#isapifilechache">ISAPIFileChache</a></li><li>ISAPILogNotSupported: </li><li><a href="mod_isapi.html#isapilognotsupported">ISAPILogNotSupported</a></li><li>ISAPIReadAheadBuffer: </li><li><a href="mod_isapi.html#isapireadaheadbuffer">ISAPIReadAheadBuffer</a></li><li>KeepAlive: </li><li><a href="core.html#keepalive">KeepAlive</a></li><li>KeepAliveTimeout: </li><li><a href="core.html#keepalivetimeout">KeepAliveTimeout</a></li><li>LanguagePriority: </li><li><a href="mod_negotiation.html#languagepriority">LanguagePriority</a></li><li>Limit: </li><li><a href="core.html#limit">Limit</a></li><li>LimitExcept: </li><li><a href="core.html#limitexcept">LimitExcept</a></li><li>LimitRequestBody: </li><li><a href="core.html#limitrequestbody">LimitRequestBody</a></li><li>LimitRequestFields: </li><li><a href="core.html#limitrequestfields">LimitRequestFields</a></li><li>LimitRequestFieldSize: </li><li><a href="core.html#limitrequestfieldsize">LimitRequestFieldSize</a></li><li>LimitRequestLine: </li><li><a href="core.html#limitrequestline">LimitRequestLine</a></li><li>LimitXMLRequestBody: </li><li><a href="core.html#limitxmlrequestbody">LimitXMLRequestBody</a></li><li>Listen: mpm_common</li><li>Listen: mpm_common</li><li>Listen: mpm_common</li><li>Listen: mpm_common</li><li>Listen: mpm_common</li><li>Listen: </li><li><a href="mpm_common.html#listen">Listen</a></li><li>ListenBacklog: mpm_common</li><li>ListenBacklog: mpm_common</li><li>ListenBacklog: mpm_common</li><li>ListenBacklog: mpm_common</li><li>ListenBacklog: mpm_common</li><li>ListenBackLog: </li><li><a href="mpm_common.html#listenbacklog">ListenBackLog</a></li><li>LoadFile: </li><li><a href="mod_so.html#loadfile">LoadFile</a></li><li>LoadModule: </li><li><a href="mod_so.html#loadmodule">LoadModule</a></li><li>Location: </li><li><a href="core.html#location">Location</a></li><li>LocationMatch: </li><li><a href="core.html#locationmatch">LocationMatch</a></li><li>LockFile: mpm_common</li><li>LockFile: mpm_common</li><li>LockFile: mpm_common</li><li>LockFile: </li><li><a href="mpm_common.html#lockfile">LockFile</a></li><li>LogFormat: </li><li><a href="mod_log_config.html#logformat">LogFormat</a></li><li>LogLevel: </li><li><a href="core.html#loglevel">LogLevel</a></li><li>MaxClients: mpm_common</li><li>MaxClients: </li><li><a href="mpm_common.html#maxclients">MaxClients</a></li><li>MaxKeepAliveRequests: </li><li><a href="core.html#maxkeepaliverequests">MaxKeepAliveRequests</a></li><li>MaxRequestsPerChild: mpm_common</li><li>MaxRequestsPerChild: mpm_common</li><li>MaxRequestsPerChild: mpm_common</li><li>MaxRequestsPerChild: mpm_common</li><li>MaxRequestsPerChild: mpm_common</li><li>MaxRequestsPerChild: </li><li><a href="mpm_common.html#maxrequestsperchild">MaxRequestsPerChild</a></li><li>MaxSpareServers: mpm_common</li><li>MaxSpareServers: </li><li><a href="prefork.html#maxspareservers">MaxSpareServers</a></li><li>MaxSpareThreads: mpm_common</li><li>MaxSpareThreads: mpm_common</li><li>MaxSpareThreads: </li><li><a href="mpm_netware.html#maxsparethreads">MaxSpareThreads</a></li><li>MaxSpareThreads: </li><li><a href="mpm_common.html#maxsparethreads">MaxSpareThreads</a></li><li>MaxThreads: </li><li><a href="mpm_netware.html#maxthreads">MaxThreads</a></li><li>MaxThreadsPerChild: mpm_common</li><li>MaxThreadsPerChild: </li><li><a href="mpm_common.html#maxthreadsperchild">MaxThreadsPerChild</a></li><li>MetaDir: </li><li><a href="mod_cern_meta.html#metadir">MetaDir</a></li><li>MetaFiles: </li><li><a href="mod_cern_meta.html#metafiles">MetaFiles</a></li><li>MetaSuffix: </li><li><a href="mod_cern_meta.html#metasuffix">MetaSuffix</a></li><li>MimeMagicFile: </li><li><a href="mod_mime_magic.html#mimemagicfile">MimeMagicFile</a></li><li>MinSpareServers: mpm_common</li><li>MinSpareServers: </li><li><a href="prefork.html#minspareservers">MinSpareServers</a></li><li>MinSpareThreads: mpm_common</li><li>MinSpareThreads: mpm_common</li><li>MinSpareThreads: </li><li><a href="mpm_netware.html#minsparethreads">MinSpareThreads</a></li><li>MinSpareThreads: </li><li><a href="mpm_common.html#minsparethreads">MinSpareThreads</a></li><li>MMapFile: </li><li><a href="mod_file_cache.html#mmapfile">MMapFile</a></li><li>MultiviewsMatch: </li><li><a href="mod_mime.html#multiviewsmatch">MultiviewsMatch</a></li><li>NameVirtualHost: </li><li><a href="core.html#namevirtualhost">NameVirtualHost</a></li><li>NoProxy: </li><li><a href="mod_proxy.html#noproxy">NoProxy</a></li><li>NumServers: mpm_common</li><li>NumServers: </li><li><a href="mpm_common.html#numservers">NumServers</a></li><li>Options: </li><li><a href="core.html#options">Options</a></li><li>Order: </li><li><a href="mod_access.html#order">Order</a></li><li>PassEnv: </li><li><a href="mod_env.html#passenv">PassEnv</a></li><li>PidFile: mpm_common</li><li>PidFile: mpm_common</li><li>PidFile: mpm_common</li><li>PidFile: mpm_common</li><li>PidFile: </li><li><a href="mpm_common.html#pidfile">PidFile</a></li><li>ProxyBlock: </li><li><a href="mod_proxy.html#proxyblock">ProxyBlock</a></li><li>ProxyDomain: </li><li><a href="mod_proxy.html#proxydomain">ProxyDomain</a></li><li>ProxyErrorOverride: </li><li><a href="mod_proxy.html#proxyerroroverride">ProxyErrorOverride</a></li><li>ProxyMaxForwards: </li><li><a href="mod_proxy.html#proxymaxforwards">ProxyMaxForwards</a></li><li>ProxyPass: </li><li><a href="mod_proxy.html#proxypass">ProxyPass</a></li><li>ProxyPassReverse: </li><li><a href="mod_proxy.html#proxypassreverse">ProxyPassReverse</a></li><li>ProxyPreserveHost: </li><li><a href="mod_proxy.html#proxypreservehost">ProxyPreserveHost</a></li><li>ProxyReceiveBufferSize: </li><li><a href="mod_proxy.html#proxyreceivebuffersize">ProxyReceiveBufferSize</a></li><li>ProxyRemote: </li><li><a href="mod_proxy.html#proxyremote">ProxyRemote</a></li><li>ProxyRequests: </li><li><a href="mod_proxy.html#proxyrequests">ProxyRequests</a></li><li>ProxyTimeout: </li><li><a href="mod_proxy.html#proxytimeout">ProxyTimeout</a></li><li>ProxyVia: </li><li><a href="mod_proxy.html#proxyvia">ProxyVia</a></li><li>ReadmeName: </li><li><a href="mod_autoindex.html#readmename">ReadmeName</a></li><li>Redirect: </li><li><a href="mod_alias.html#redirect">Redirect</a></li><li>RedirectMatch: </li><li><a href="mod_alias.html#redirectmatch">RedirectMatch</a></li><li>RedirectPermanent: </li><li><a href="mod_alias.html#redirectpermanent">RedirectPermanent</a></li><li>RedirectTemp: </li><li><a href="mod_alias.html#redirecttemp">RedirectTemp</a></li><li>RemoveCharset: </li><li><a href="mod_mime.html#removecharset">RemoveCharset</a></li><li>RemoveEncoding: </li><li><a href="mod_mime.html#removeencoding">RemoveEncoding</a></li><li>RemoveHandler: </li><li><a href="mod_mime.html#removehandler">RemoveHandler</a></li><li>RemoveInputFilter: </li><li><a href="mod_mime.html#removeinputfilter">RemoveInputFilter</a></li><li>RemoveLanguage: </li><li><a href="mod_mime.html#removelanguage">RemoveLanguage</a></li><li>RemoveOutputFilter: </li><li><a href="mod_mime.html#removeoutputfilter">RemoveOutputFilter</a></li><li>RemoveType: </li><li><a href="mod_mime.html#removetype">RemoveType</a></li><li>RequestHeader: </li><li><a href="mod_headers.html#requestheader">RequestHeader</a></li><li>Require: </li><li><a href="core.html#require">Require</a></li><li>RewriteBase: </li><li><a href="mod_rewrite.html#rewritebase">RewriteBase</a></li><li>RewriteCond: </li><li><a href="mod_rewrite.html#rewritecond">RewriteCond</a></li><li>RewriteEngine: </li><li><a href="mod_rewrite.html#rewriteengine">RewriteEngine</a></li><li>RewriteLock: </li><li><a href="mod_rewrite.html#rewritelock">RewriteLock</a></li><li>RewriteLog: </li><li><a href="mod_rewrite.html#rewritelog">RewriteLog</a></li><li>RewriteLogLevel: </li><li><a href="mod_rewrite.html#rewriteloglevel">RewriteLogLevel</a></li><li>RewriteMap: </li><li><a href="mod_rewrite.html#rewritemap">RewriteMap</a></li><li>RewriteOptions: </li><li><a href="mod_rewrite.html#rewriteoptions">RewriteOptions</a></li><li>RewriteRule: </li><li><a href="mod_rewrite.html#rewriterule">RewriteRule</a></li><li>RLimitCPU: </li><li><a href="core.html#rlimitcpu">RLimitCPU</a></li><li>RLimitMEM: </li><li><a href="core.html#rlimitmem">RLimitMEM</a></li><li>RLimitNPROC: </li><li><a href="core.html#rlimitnproc">RLimitNPROC</a></li><li>Satisfy: </li><li><a href="core.html#satisfy">Satisfy</a></li><li>ScoreBoardFile: mpm_common</li><li>ScoreBoardFile: mpm_common</li><li>ScoreBoardFile: mpm_common</li><li>ScoreBoardFile: </li><li><a href="mpm_common.html#scoreboardfile">ScoreBoardFile</a></li><li>Script: </li><li><a href="mod_actions.html#script">Script</a></li><li>ScriptAlias: </li><li><a href="mod_alias.html#scriptalias">ScriptAlias</a></li><li>ScriptAliasMatch: </li><li><a href="mod_alias.html#scriptaliasmatch">ScriptAliasMatch</a></li><li>ScriptInterpreterSource: </li><li><a href="core.html#scriptinterpretersource">ScriptInterpreterSource</a></li><li>ScriptLog: mod_cgi</li><li>ScriptLog: </li><li><a href="mod_cgi.html#scriptlog">ScriptLog</a></li><li>ScriptLogBuffer: mod_cgi</li><li>ScriptLogBuffer: </li><li><a href="mod_cgi.html#scriptlogbuffer">ScriptLogBuffer</a></li><li>ScriptLogLength: mod_cgi</li><li>ScriptLogLength: </li><li><a href="mod_cgi.html#scriptloglength">ScriptLogLength</a></li><li>ScriptSock: </li><li><a href="mod_cgid.html#scriptsock">ScriptSock</a></li><li>SendBufferSize: mpm_common</li><li>SendBufferSize: mpm_common</li><li>SendBufferSize: mpm_common</li><li>SendBufferSize: mpm_common</li><li>SendBufferSize: mpm_common</li><li>SendBufferSize: </li><li><a href="mpm_common.html#sendbuffersize">SendBufferSize</a></li><li>ServerAdmin: </li><li><a href="core.html#serveradmin">ServerAdmin</a></li><li>ServerAlias: </li><li><a href="core.html#serveralias">ServerAlias</a></li><li>ServerLimit: mpm_common</li><li>ServerLimit: mpm_common</li><li>ServerLimit: </li><li><a href="mpm_common.html#serverlimit">ServerLimit</a></li><li>ServerName: </li><li><a href="core.html#servername">ServerName</a></li><li>ServerPath: </li><li><a href="core.html#serverpath">ServerPath</a></li><li>ServerRoot: </li><li><a href="core.html#serverroot">ServerRoot</a></li><li>ServerSignature: </li><li><a href="core.html#serversignature">ServerSignature</a></li><li>ServerTokens: </li><li><a href="core.html#servertokens">ServerTokens</a></li><li>SetEnv: </li><li><a href="mod_env.html#setenv">SetEnv</a></li><li>SetEnvIf: </li><li><a href="mod_setenvif.html#setenvif">SetEnvIf</a></li><li>SetEnvIfNoCase: </li><li><a href="mod_setenvif.html#setenvifnocase">SetEnvIfNoCase</a></li><li>SetHandler: </li><li><a href="core.html#sethandler">SetHandler</a></li><li>SetInputFilter: </li><li><a href="core.html#setinputfilter">SetInputFilter</a></li><li>SetOutputFilter: </li><li><a href="core.html#setoutputfilter">SetOutputFilter</a></li><li>SSIEndTag: </li><li><a href="mod_include.html#ssiendtag">SSIEndTag</a></li><li>SSIErrorMsg: </li><li><a href="mod_include.html#ssierrormsg">SSIErrorMsg</a></li><li>SSIStartTag: </li><li><a href="mod_include.html#ssistarttag">SSIStartTag</a></li><li>SSITimeFormat: </li><li><a href="mod_include.html#ssitimeformat">SSITimeFormat</a></li><li>SSIUndefinedEcho: </li><li><a href="mod_include.html#ssiundefinedecho">SSIUndefinedEcho</a></li><li>SSLCACertificateFile: </li><li><a href="mod_ssl.html#sslcacertificatefile">SSLCACertificateFile</a></li><li>SSLCACertificatePath: </li><li><a href="mod_ssl.html#sslcacertificatepath">SSLCACertificatePath</a></li><li>SSLCARevocationFile: </li><li><a href="mod_ssl.html#sslcarevocationfile">SSLCARevocationFile</a></li><li>SSLCARevocationPath: </li><li><a href="mod_ssl.html#sslcarevocationpath">SSLCARevocationPath</a></li><li>SSLCertificateChainFile: </li><li><a href="mod_ssl.html#sslcertificatechainfile">SSLCertificateChainFile</a></li><li>SSLCertificateFile: </li><li><a href="mod_ssl.html#sslcertificatefile">SSLCertificateFile</a></li><li>SSLCertificateKeyFile: </li><li><a href="mod_ssl.html#sslcertificatekeyfile">SSLCertificateKeyFile</a></li><li>SSLCipherSuite: </li><li><a href="mod_ssl.html#sslciphersuite">SSLCipherSuite</a></li><li>SSLEngine: </li><li><a href="mod_ssl.html#sslengine">SSLEngine</a></li><li>SSLMutex: </li><li><a href="mod_ssl.html#sslmutex">SSLMutex</a></li><li>SSLOptions: </li><li><a href="mod_ssl.html#ssloptions">SSLOptions</a></li><li>SSLPassPhraseDialog: </li><li><a href="mod_ssl.html#sslpassphrasedialog">SSLPassPhraseDialog</a></li><li>SSLProtocol: </li><li><a href="mod_ssl.html#sslprotocol">SSLProtocol</a></li><li>SSLRandomSeed: </li><li><a href="mod_ssl.html#sslrandomseed">SSLRandomSeed</a></li><li>SSLRequire: </li><li><a href="mod_ssl.html#sslrequire">SSLRequire</a></li><li>SSLRequireSSL: </li><li><a href="mod_ssl.html#sslrequiressl">SSLRequireSSL</a></li><li>SSLSessionCache: </li><li><a href="mod_ssl.html#sslsessioncache">SSLSessionCache</a></li><li>SSLSessionCacheTimeout: </li><li><a href="mod_ssl.html#sslsessioncachetimeout">SSLSessionCacheTimeout</a></li><li>SSLVerifyClient: </li><li><a href="mod_ssl.html#sslverifyclient">SSLVerifyClient</a></li><li>SSLVerifyDepth: </li><li><a href="mod_ssl.html#sslverifydepth">SSLVerifyDepth</a></li><li>StartServers: mpm_common</li><li>StartServers: mpm_common</li><li>StartServers: </li><li><a href="mpm_common.html#startservers">StartServers</a></li><li>StartThreads: mpm_common</li><li>StartThreads: </li><li><a href="mpm_netware.html#startthreads">StartThreads</a></li><li>StartThreads: </li><li><a href="mpm_common.html#startthreads">StartThreads</a></li><li>SuexecUserGroup: </li><li><a href="mod_suexec.html#suexecusergroup">SuexecUserGroup</a></li><li>ThreadLimit: mpm_common</li><li>ThreadLimit: </li><li><a href="mpm_common.html#threadlimit">ThreadLimit</a></li><li>ThreadsPerChild: mpm_common</li><li>ThreadsPerChild: mpm_common</li><li>ThreadsPerChild: </li><li><a href="mpm_common.html#threadsperchild">ThreadsPerChild</a></li><li>ThreadStackSize: </li><li><a href="mpm_netware.html#threadstacksize">ThreadStackSize</a></li><li>TimeOut: </li><li><a href="core.html#timeout">TimeOut</a></li><li>TransferLog: </li><li><a href="mod_log_config.html#transferlog">TransferLog</a></li><li>TypesConfig: </li><li><a href="mod_mime.html#typesconfig">TypesConfig</a></li><li>UnsetEnv: </li><li><a href="mod_env.html#unsetenv">UnsetEnv</a></li><li>UseCanonicalName: </li><li><a href="core.html#usecanonicalname">UseCanonicalName</a></li><li>User: mpm_common</li><li>User: mpm_common</li><li>User: mpm_common</li><li>User: </li><li><a href="mpm_common.html#user">User</a></li><li>UserDir: </li><li><a href="mod_userdir.html#userdir">UserDir</a></li><li>VirtualDocumentRoot: </li><li><a href="mod_vhost_alias.html#virtualdocumentroot">VirtualDocumentRoot</a></li><li>VirtualDocumentRootIP: </li><li><a href="mod_vhost_alias.html#virtualdocumentrootip">VirtualDocumentRootIP</a></li><li>VirtualHost: </li><li><a href="core.html#virtualhost">VirtualHost</a></li><li>VirtualScriptAlias: </li><li><a href="mod_vhost_alias.html#virtualscriptalias">VirtualScriptAlias</a></li><li>VirtualScriptAliasIP: </li><li><a href="mod_vhost_alias.html#virtualscriptaliasip">VirtualScriptAliasIP</a></li><li>XBitHack: </li><li><a href="mod_include.html#xbithack">XBitHack</a></li></ul></blockquote><hr/><h3 align="center">Apache HTTP Server Version 2.0</h3><a href="./"><img src="../images/index.gif" alt="Index"/></a><a href="../"><img src="../images/home.gif" alt="Home"/></a></body></html>
1.1 httpd-2.0/docs/manual/mod/index.html.en
Index: index.html.en
===================================================================
<html xmlns="http://www.w3.org/TR/xhtml1/strict"><head><title>Module Index- Apache HTTP Server</title><link href="../style/manual.css" type="text/css" rel="stylesheet"/></head><body><blockquote><div align="center"><img src="../images/sub.gif" alt="[APACHE DOCUMENTATION]"/><h3>Apache HTTP Server Version 2.0</h3></div><h1 align="center">Module Index</h1>
<p>
Below is a list of all of the modules that come as part of
the Apache distribution. See also the complete
alphabetical list of <a href="directives.html">all Apache
directives</a>.
</p>
<h2>Core Features and Multi-Processing Modules</h2><dl><dt><a href="core.html">core</a></dt><dd>Core Apache HTTP Server features that are always
available</dd><dt><a href="mpm_common.html">mpm_common</a></dt><dd>A collection of directives that are implemented by
more than one multi-processing module (MPM)</dd><dt><a href="mpm_netware.html">mpm_netware</a></dt><dd>Multi-Processing Module implementing an exclusively threaded web
server optimized for Novell NetWare</dd><dt><a href="mpm_winnt.html">mpm_winnt</a></dt><dd>This Multi-Processing Module is optimized for Windows
NT.</dd><dt><a href="perchild.html">perchild</a></dt><dd>Multi-Processing Module allowing for daemon processes
serving requests to be assigned a variety of different
userids</dd><dt><a href="prefork.html">prefork</a></dt><dd>Implements a non-threaded, pre-forking web server</dd><dt><a href="worker.html">worker</a></dt><dd>Multi-Processing Module implementing a hybrid
multi-threaded multi-process web server</dd></dl><h2>Other Modules</h2><dl><dt><a href="mod_access.html">mod_access</a></dt><dd>Provides access control based on client hostname, IP
address, or other characteristics of the client request.</dd><dt><a href="mod_actions.html">mod_actions</a></dt><dd>This module provides for executing CGI scripts based on
media type or request method.</dd><dt><a href="mod_alias.html">mod_alias</a></dt><dd>Provides for mapping different parts of the host
filesystem in the document tree and for URL redirection</dd><dt><a href="mod_asis.html">mod_asis</a></dt><dd>Sends files that contain their own
HTTP headers</dd><dt><a href="mod_auth.html">mod_auth</a></dt><dd>User authentication using text files</dd><dt><a href="mod_auth_anon.html">mod_auth_anon</a></dt><dd>Allows "anonymous" user access to authenticated
areas</dd><dt><a href="mod_auth_dbm.html">mod_auth_dbm</a></dt><dd>Provides for user authentication using DBM
files</dd><dt><a href="mod_auth_digest.html">mod_auth_digest</a></dt><dd>User authentication using MD5
Digest Authentication.</dd><dt><a href="mod_autoindex.html">mod_autoindex</a></dt><dd>Generates directory indexes,
automatically, similar to the Unix <em>ls</em> command or the
Win32 <em>dir</em> shell command</dd><dt><a href="mod_cache.html">mod_cache</a></dt><dd>Content cache keyed to URIs</dd><dt><a href="mod_cern_meta.html">mod_cern_meta</a></dt><dd>CERN httpd metafile semantics</dd><dt><a href="mod_cgi.html">mod_cgi</a></dt><dd>Execution of CGI scripts</dd><dt><a href="mod_cgid.html">mod_cgid</a></dt><dd>Execution of CGI scripts using an
external CGI daemon</dd><dt><a href="mod_charset_lite.html">mod_charset_lite</a></dt><dd>Specify character set translation or recoding</dd><dt><a href="mod_dav.html">mod_dav</a></dt><dd>Distributed Authoring and Versioning
(<a href="http://www.webdav.org/">WebDAV</a>) functionality</dd><dt><a href="mod_deflate.html">mod_deflate</a></dt><dd>Compress content before
it is delivered to the client</dd><dt><a href="mod_dir.html">mod_dir</a></dt><dd>Provides for "trailing slash" redirects and
serving directory index files</dd><dt><a href="mod_env.html">mod_env</a></dt><dd>Modifies the environment which is
passed to CGI scripts and SSI pages</dd><dt><a href="mod_example.html">mod_example</a></dt><dd>Illustrates the Apache module API</dd><dt><a href="mod_expires.html">mod_expires</a></dt><dd>Generation of
<code>Expires</code> HTTP headers according to user-specified
criteria</dd><dt><a href="mod_ext_filter.html">mod_ext_filter</a></dt><dd>Pass the response body
through an external program before delivery to the
client</dd><dt><a href="mod_file_cache.html">mod_file_cache</a></dt><dd>Caches a static list of files in memory</dd><dt><a href="mod_headers.html">mod_headers</a></dt><dd>Customization of HTTP request
and response headers</dd><dt><a href="mod_imap.html">mod_imap</a></dt><dd>Server-side imagemap processing</dd><dt><a href="mod_include.html">mod_include</a></dt><dd>Server-parsed html documents (Server Side Includes)</dd><dt><a href="mod_info.html">mod_info</a></dt><dd>Provides a comprehensive overview of the server
configuration</dd><dt><a href="mod_isapi.html">mod_isapi</a></dt><dd>ISAPI Extensions within Apache for Windows</dd><dt><a href="mod_log_config.html">mod_log_config</a></dt><dd>Logging of the requests made to the server</dd><dt><a href="mod_mime.html">mod_mime</a></dt><dd>Associates the requested filename's extensions
with the file's behavior (handlers and filters)
and content (mime-type, language, character set and
encoding)</dd><dt><a href="mod_mime_magic.html">mod_mime_magic</a></dt><dd>Determines the MIME type of a file
by looking at a few bytes of its contents</dd><dt><a href="mod_negotiation.html">mod_negotiation</a></dt><dd>Provides for <a href="../content-negotiation.html">content negotiation</a></dd><dt><a href="mod_proxy.html">mod_proxy</a></dt><dd>HTTP/1.1 proxy/gateway server</dd><dt><a href="mod_rewrite.html">mod_rewrite</a></dt><dd>Provides a rule-based rewriting engine to rewrite requested
URLs on the fly</dd><dt><a href="mod_setenvif.html">mod_setenvif</a></dt><dd>Allows the setting of environment variables based
on characteristics of the request</dd><dt><a href="mod_so.html">mod_so</a></dt><dd>
This module provides for loading of executable code and
modules into the server at start-up or restart time.
</dd><dt><a href="mod_speling.html">mod_speling</a></dt><dd>Attempts to correct mistaken URLs that
users might have entered by ignoring capitalization and by
allowing up to one misspelling</dd><dt><a href="mod_ssl.html">mod_ssl</a></dt><dd>Strong cryptography using the Secure Sockets
Layer (SSL) and Transport Layer Security (TLS) protocols</dd><dt><a href="mod_status.html">mod_status</a></dt><dd>Provides information on server activity and
performance</dd><dt><a href="mod_suexec.html">mod_suexec</a></dt><dd>Allows CGI scripts to run as a specified user
and Group</dd><dt><a href="mod_unique_id.html">mod_unique_id</a></dt><dd>Provides an environment variable with a unique
identifier for each request</dd><dt><a href="mod_userdir.html">mod_userdir</a></dt><dd>Provides for user-specific
directories</dd><dt><a href="mod_usertrack.html">mod_usertrack</a></dt><dd>
This module uses cookies to provide for a
<em>clickstream</em> log of user activity on a site.
</dd><dt><a href="mod_vhost_alias.html">mod_vhost_alias</a></dt><dd>Provides for <a href="../vhosts/mass.html">dynamically configured mass virtual
hosting</a></dd></dl></blockquote><hr/><h3 align="center">Apache HTTP Server Version 2.0</h3><a href="./"><img src="../images/index.gif" alt="Index"/></a><a href="../"><img src="../images/home.gif" alt="Home"/></a></body></html>
1.1 httpd-2.0/docs/manual/mod/mod_access.html.en
Index: mod_access.html.en
===================================================================
<html xmlns="http://www.w3.org/TR/xhtml1/strict"><head><!--
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
This file is generated from xml source: DO NOT EDIT
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
--><title>mod_access- Apache HTTP Server</title><link href="../style/manual.css" type="text/css" rel="stylesheet"/></head><body><blockquote><div align="center"><img src="../images/sub.gif" alt="[APACHE DOCUMENTATION]"/><h3>Apache HTTP Server Version 2.0</h3></div><h1 align="center">Apache Module mod_access</h1><table cellspacing="1" cellpadding="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td valign="top"><span class="help">Description:</span></td><td>Provides access control based on client hostname, IP
address, or other characteristics of the client request.</td></tr><tr><td><a href="module-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="module-dict.html#ModuleIdentifier" class="help">Module Identifier:</a></td><td>access_module</td></tr></table></td></tr></table><h2>Summary</h2>
<p>The directives provided by mod_access are used in <a href="core.html#directory" class="directive"><code class="directive"><Directory></code></a>, <a href="core.html#files" class="directive"><code class="directive"><Files></code></a>, and <a href="core.html#location" class="directive"><code class="directive"><Location></code></a> sections as well as
<code><a href="core.html#accessfilename">.htaccess</a></code>
files to control access to particular parts of the server. Access
can be controlled based on the client hostname, IP address, or
other characteristics of the client request, as captured in <a href="../env.html">environment variables</a>. The <a href="#allow" class="directive"><code class="directive">Allow</code></a> and <a href="#deny" class="directive"><code class="directive">Deny</code></a> directives are used to
specify which clients are or are not allowed access to the server,
while the <a href="#order" class="directive"><code class="directive">Order</code></a>
directive sets the default access state, and configures how the
<a href="#allow" class="directive"><code class="directive">Allow</code></a> and <a href="#deny" class="directive"><code class="directive">Deny</code></a> directives interact with each
other.</p>
<p>Both host-based access restrictions and password-based
authentication may be implemented simultaneously. In that case,
the <a href="core.html#satisfy" class="directive"><code class="directive">Satisfy</code></a> directive is used
to determine how the two sets of restrictions interact.</p>
<p>In general, access restriction directives apply to all
access methods (<code>GET</code>, <code>PUT</code>,
<code>POST</code>, etc). This is the desired behavior in most
cases. However, it is possible to restrict some methods, while
leaving other methods unrestricted, by enclosing the directives
in a <a href="core.html#limit" class="directive"><code class="directive"><Limit></code></a> section.</p>
<h2>Directives</h2><ul><li><a href="#allow">Allow</a></li><li><a href="#deny">Deny</a></li><li><a href="#order">Order</a></li></ul><p><strong>See also </strong></p><ul><li><a href="core.html#satisfy" class="directive"><code class="directive">Satisfy</code></a></li><li><a href="core.html#require" class="directive"><code class="directive">Require</code></a></li></ul><hr/><h2><a name="Allow">Allow</a> <a name="allow">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Controls which hosts can access an area of the
server</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td> Allow from
all|<em>host</em>|env=<em>env-variable</em>
[<em>host</em>|env=<em>env-variable</em>] ...</td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>Limit</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_access</td></tr></table></td></tr></table>
<p>The <code class="directive">Allow</code> directive affects which hosts can
access an area of the server. Access can be controlled by
hostname, IP Address, IP Address range, or by other
characteristics of the client request captured in environment
variables.</p>
<p>The first argument to this directive is always
<code>from</code>. The subsequent arguments can take three
different forms. If <code>Allow from all</code> is specified, then
all hosts are allowed access, subject to the configuration of the
<a href="#deny" class="directive"><code class="directive">Deny</code></a> and <a href="#order" class="directive"><code class="directive">Order</code></a> directives as discussed
below. To allow only particular hosts or groups of hosts to access
the server, the <em>host</em> can be specified in any of the
following formats:</p>
<dl>
<dt>A (partial) domain-name</dt>
<dd>Example: <code>Allow from apache.org</code><br>
Hosts whose names match, or end in, this string are allowed
access. Only complete components are matched, so the above
example will match <code>foo.apache.org</code> but it will
not match <code>fooapache.org</code>. This configuration will
cause the server to perform a reverse DNS lookup on the
client IP address, regardless of the setting of the <a href="core.html#hostnamelookups" class="directive"><code class="directive">HostnameLookups</code></a>
directive.</dd>
<dt>A full IP address</dt>
<dd>Example: <code>Allow from 10.1.2.3</code><br>
An IP address of a host allowed access</dd>
<dt>A partial IP address</dt>
<dd>Example: <code>Allow from 10.1</code><br>
The first 1 to 3 bytes of an IP address, for subnet
restriction.</dd>
<dt>A network/netmask pair</dt>
<dd>Example: <code>Allow from
10.1.0.0/255.255.0.0</code><br>
A network a.b.c.d, and a netmask w.x.y.z. For more
fine-grained subnet restriction.</dd>
<dt>A network/nnn CIDR specification</dt>
<dd>Example: <code>Allow from 10.1.0.0/16</code><br>
Similar to the previous case, except the netmask consists of
nnn high-order 1 bits.</dd>
</dl>
<p>Note that the last three examples above match exactly the
same set of hosts.</p>
<p>IPv6 addresses and IPv6 subnets can be specified as shown
below:</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
Allow from fe80::a00:20ff:fea7:ccea<br>
Allow from fe80::a00:20ff:fea7:ccea/10
</code></td></tr></table></blockquote>
<p>The third format of the arguments to the
<code class="directive">Allow</code> directive allows access to the server
to be controlled based on the existence of an <a href="../env.html">environment variable</a>. When <code>Allow from
env=</code><em>env-variable</em> is specified, then the request is
allowed access if the environment variable <em>env-variable</em>
exists. The server provides the ability to set environment
variables in a flexible way based on characteristics of the client
request using the directives provided by
<code><a href="mod_setenvif.html">mod_setenvif</a></code>. Therefore, this directive can be
used to allow access based on such factors as the clients
<code>User-Agent</code> (browser type), <code>Referer</code>, or
other HTTP request header fields.</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><p align="center"><strong>Example:</strong></p><code>
SetEnvIf User-Agent ^KnockKnock/2.0 let_me_in<br>
<Directory /docroot><br>
Order Deny,Allow<br>
Deny from all<br>
Allow from env=let_me_in<br>
</Directory>
</code></td></tr></table></blockquote>
<p>In this case, browsers with a user-agent string beginning
with <code>KnockKnock/2.0</code> will be allowed access, and all
others will be denied.</p>
<hr/><h2><a name="Deny">Deny</a> <a name="deny">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Controls which hosts are denied access to the
server</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td> Deny from
all|<em>host</em>|env=<em>env-variable</em>
[<em>host</em>|env=<em>env-variable</em>] ...</td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>Limit</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_access</td></tr></table></td></tr></table>
<p>This directive allows access to the server to be restricted
based on hostname, IP address, or environment variables. The
arguments for the <code class="directive">Deny</code> directive are
identical to the arguments for the <a href="#allow" class="directive"><code class="directive">Allow</code></a> directive.</p>
<hr/><h2><a name="Order">Order</a> <a name="order">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Controls the default access state and the order in which
Allow and Deny are
evaluated.</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td> Order <em>ordering</em></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>Order Deny,Allow</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>Limit</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_access</td></tr></table></td></tr></table>
<p>The <code class="directive">Order</code> directive controls the default
access state and the order in which <a href="#allow" class="directive"><code class="directive">Allow</code></a> and <a href="#deny" class="directive"><code class="directive">Deny</code></a> directives are evaluated.
<em>Ordering</em> is one of</p>
<dl>
<dt>Deny,Allow</dt>
<dd>The <a href="#deny" class="directive"><code class="directive">Deny</code></a> directives
are evaluated before the <a href="#allow" class="directive"><code class="directive">Allow</code></a> directives. Access is
allowed by default. Any client which does not match a
<a href="#deny" class="directive"><code class="directive">Deny</code></a> directive or does
match an <a href="#allow" class="directive"><code class="directive">Allow</code></a>
directive will be allowed access to the server.</dd>
<dt>Allow,Deny</dt>
<dd>The <a href="#allow" class="directive"><code class="directive">Allow</code></a>
directives are evaluated before the <a href="#deny" class="directive"><code class="directive">Deny</code></a> directives. Access is denied
by default. Any client which does not match an <a href="#allow" class="directive"><code class="directive">Allow</code></a> directive or does match a
<a href="#deny" class="directive"><code class="directive">Deny</code></a> directive will be
denied access to the server.</dd>
<dt>Mutual-failure</dt>
<dd>Only those hosts which appear on the <a href="#allow" class="directive"><code class="directive">Allow</code></a> list and do not appear on
the <a href="#deny" class="directive"><code class="directive">Deny</code></a> list are
granted access. This ordering has the same effect as <code>Order
Allow,Deny</code> and is deprecated in favor of that
configuration.</dd>
</dl>
<p>Keywords may only be separated by a comma; no whitespace is
allowed between them. Note that in all cases every <a href="#allow" class="directive"><code class="directive">Allow</code></a> and <a href="#deny" class="directive"><code class="directive">Deny</code></a> statement is evaluated.</p>
<p>In the following example, all hosts in the apache.org domain
are allowed access; all other hosts are denied access.</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
Order Deny,Allow<br>
Deny from all<br>
Allow from apache.org<br>
</code></td></tr></table></blockquote>
<p>In the next example, all hosts in the apache.org domain are
allowed access, except for the hosts which are in the
foo.apache.org subdomain, who are denied access. All hosts not
in the apache.org domain are denied access because the default
state is to deny access to the server.</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
Order Allow,Deny<br>
Allow from apache.org<br>
Deny from foo.apache.org<br>
</code></td></tr></table></blockquote>
<p>On the other hand, if the <code>Order</code> in the last
example is changed to <code>Deny,Allow</code>, all hosts will
be allowed access. This happens because, regardless of the
actual ordering of the directives in the configuration file,
the <code>Allow from apache.org</code> will be evaluated last
and will override the <code>Deny from foo.apache.org</code>.
All hosts not in the <code>apache.org</code> domain will also
be allowed access because the default state will change to
<em>allow</em>.</p>
<p>The presence of an <code>Order</code> directive can affect
access to a part of the server even in the absence of accompanying
<a href="#allow" class="directive"><code class="directive">Allow</code></a> and <a href="#deny" class="directive"><code class="directive">Deny</code></a> directives because of its effect
on the default access state. For example,</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
<Directory /www><br>
Order Allow,Deny<br>
</Directory>
</code></td></tr></table></blockquote>
<p>will deny all access to the <code>/www</code> directory
because the default access state will be set to
<em>deny</em>.</p>
<p>The <code class="directive">Order</code> directive controls the order of access
directive processing only within each phase of the server's
configuration processing. This implies, for example, that an
<a href="#allow" class="directive"><code class="directive">Allow</code></a> or <a href="#deny" class="directive"><code class="directive">Deny</code></a> directive occurring in a
<a href="core.html#location" class="directive"><code class="directive"><Location></code></a> section will
always be evaluated after an <a href="#allow" class="directive"><code class="directive">Allow</code></a> or <a href="#deny" class="directive"><code class="directive">Deny</code></a> directive occurring in a
<a href="core.html#directory" class="directive"><code class="directive"><Directory></code></a> section or
<code>.htaccess</code> file, regardless of the setting of the
<code class="directive">Order</code> directive. For details on the merging
of configuration sections, see the documentation on <a href="../sections.html">How Directory, Location and Files sections
work</a>.</p>
<hr/></blockquote><h3 align="center">Apache HTTP Server Version 2.0</h3><a href="./"><img src="../images/index.gif" alt="Index"/></a><a href="../"><img src="../images/home.gif" alt="Home"/></a></body></html>
1.1 httpd-2.0/docs/manual/mod/mod_actions.html.en
Index: mod_actions.html.en
===================================================================
<html xmlns="http://www.w3.org/TR/xhtml1/strict"><head><!--
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
This file is generated from xml source: DO NOT EDIT
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
--><title>mod_actions- Apache HTTP Server</title><link href="../style/manual.css" type="text/css" rel="stylesheet"/></head><body><blockquote><div align="center"><img src="../images/sub.gif" alt="[APACHE DOCUMENTATION]"/><h3>Apache HTTP Server Version 2.0</h3></div><h1 align="center">Apache Module mod_actions</h1><table cellspacing="1" cellpadding="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td valign="top"><span class="help">Description:</span></td><td>This module provides for executing CGI scripts based on
media type or request method.</td></tr><tr><td><a href="module-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="module-dict.html#ModuleIdentifier" class="help">Module Identifier:</a></td><td>actions_module</td></tr></table></td></tr></table><h2>Summary</h2>
<p>This module has two directives. The <a href="#action" class="directive"><code class="directive">Action</code></a> directive lets you run CGI
scripts whenever a file of a certain type is requested. The
<a href="#script" class="directive"><code class="directive">Script</code></a> directive lets
you run CGI scripts whenever a particular method is used in a
request. This makes it much easier to execute scripts that process
files.</p>
<h2>Directives</h2><ul><li><a href="#action">Action</a></li><li><a href="#script">Script</a></li></ul><hr/><h2><a name="Action">Action</a> <a name="action">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Activates a CGI script for a particular handler or
content-type</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>Action <em>action-type cgi-script</em></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host, directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>FileInfo</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_actions</td></tr></table></td></tr></table>
<p>This directive adds an action, which will activate
<em>cgi-script</em> when <em>action-type</em> is triggered by the
request. The <em>cgi-script</em> is the URL-path to a resource
that has been designated as a CGI script using <a href="mod_alias.html#scriptaliase" class="directive"><code class="directive">ScriptAliase</code></a> or <a href="mod_mime.html#addhandler" class="directive"><code class="directive">AddHandler</code></a>. The
<em>action-type</em> can be either a <a href="../handler.html">handler</a> or a MIME content type. It
sends the URL and file path of the requested document using the
standard CGI PATH_INFO and PATH_TRANSLATED environment
variables.</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><p align="center"><strong>Examples</strong></p><code>
# Requests for files of a particular type:<br>
Action image/gif /cgi-bin/images.cgi<br>
<br>
# Files of a particular file extension<br>
AddHandler my-file-type .xyz<br>
Action my-file-type /cgi-bin/program.cgi<br>
</code></td></tr></table></blockquote>
<p>In the first example, requests for files with a MIME content
type of <code>image/gif</code> will instead be handled by the
specified cgi script <code>/cgi-bin/images.cgi</code>.</p>
<p>In the second example, requests for files with a file extension of
<code>.xyz</code> are handled instead by the specified cgi script
<code>/cgi-bin/program.cgi</code>.</p>
<p><strong>See also </strong></p><ul><li><a href="mod_mime.html#addhandler" class="directive"><code class="directive">AddHandler</code></a></li></ul><hr/><h2><a name="Script">Script</a> <a name="script">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Activates a CGI script for a particular request
method.</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td> Script <em>method cgi-script</em></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host, directory</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_actions</td></tr></table></td></tr></table>
<p>This directive adds an action, which will activate
<em>cgi-script</em> when a file is requested using the method of
<em>method</em>. The <em>cgi-script</em> is the URL-path to a
resource that has been designated as a CGI script using <a href="mod_alias.html#scriptaliase" class="directive"><code class="directive">ScriptAliase</code></a> or <a href="mod_mime.html#addhandler" class="directive"><code class="directive">AddHandler</code></a>. The URL and
file path of the requested document is sent using the standard CGI
PATH_INFO and PATH_TRANSLATED environment variables.</p>
<blockquote><table><tr><td bgcolor="#e0e5f5">
Any arbitrary method name may be used. <strong>Method names are
case-sensitive</strong>, so <code>Script PUT</code> and
<code>Script put</code> have two entirely different
effects.
</td></tr></table></blockquote>
<p>Note that the Script command defines default actions only.
If a CGI script is called, or some other resource that is
capable of handling the requested method internally, it will do
so. Also note that Script with a method of <code>GET</code>
will only be called if there are query arguments present
(<em>e.g.</em>, foo.html?hi). Otherwise, the request will
proceed normally.</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><p align="center"><strong>Examples</strong></p><code>
# For <ISINDEX>-style searching<br>
Script GET /cgi-bin/search<br>
# A CGI PUT handler<br>
Script PUT /~bob/put.cgi<br>
</code></td></tr></table></blockquote>
<hr/></blockquote><h3 align="center">Apache HTTP Server Version 2.0</h3><a href="./"><img src="../images/index.gif" alt="Index"/></a><a href="../"><img src="../images/home.gif" alt="Home"/></a></body></html>
1.1 httpd-2.0/docs/manual/mod/mod_alias.html.en
Index: mod_alias.html.en
===================================================================
<html xmlns="http://www.w3.org/TR/xhtml1/strict"><head><!--
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
This file is generated from xml source: DO NOT EDIT
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
--><title>mod_alias- Apache HTTP Server</title><link href="../style/manual.css" type="text/css" rel="stylesheet"/></head><body><blockquote><div align="center"><img src="../images/sub.gif" alt="[APACHE DOCUMENTATION]"/><h3>Apache HTTP Server Version 2.0</h3></div><h1 align="center">Apache Module mod_alias</h1><table cellspacing="1" cellpadding="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td valign="top"><span class="help">Description:</span></td><td>Provides for mapping different parts of the host
filesystem in the document tree and for URL redirection</td></tr><tr><td><a href="module-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="module-dict.html#ModuleIdentifier" class="help">Module Identifier:</a></td><td>alias_module</td></tr></table></td></tr></table><h2>Summary</h2>
<p>The directives contained in this module allow for manipulation
and control of URLs as requests arrive at the server. The
<a href="#alias" class="directive"><code class="directive">Alias</code></a> and <a href="#scriptalias" class="directive"><code class="directive">ScriptAlias</code></a> directives are used to
map between URLs and filesystem paths. This allows for content
which is not directly under the <a href="core.html#documentroot" class="directive"><code class="directive">DocumentRoot</code></a> served as part of the web
document tree. The <a href="#scriptalias" class="directive"><code class="directive">ScriptAlias</code></a> directive has the
additional effect of marking the target directory as containing
only CGI scripts.</p>
<p>The <a href="#redirect" class="directive"><code class="directive">Redirect</code></a>
directives are used to instruct clients to make a new request with
a different URL. They are often used when a resource has moved to
a new location.</p>
<h2>Directives</h2><ul><li><a href="#alias">Alias</a></li><li><a href="#aliasmatch">AliasMatch</a></li><li><a href="#redirect">Redirect</a></li><li><a href="#redirectmatch">RedirectMatch</a></li><li><a href="#redirectpermanent">RedirectPermanent</a></li><li><a href="#redirecttemp">RedirectTemp</a></li><li><a href="#scriptalias">ScriptAlias</a></li><li><a href="#scriptaliasmatch">ScriptAliasMatch</a></li></ul><p><strong>See also </strong></p><ul><li><code><a href="mod_rewrite.html">mod_rewrite</a></code></li><li><a href="../urlmapping.html">Mapping URLs to the filesystem</a></li></ul><hr/><h2><a name="Alias">Alias</a> <a name="alias">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Maps URLs to filesystem locations</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td> Alias <em>URL-path
file-path</em>|<em>directory-path</em></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_alias</td></tr></table></td></tr></table>
<p>The <code class="directive">Alias</code> directive allows documents to
be stored in the local filesystem other than under the
<a href="core.html#documentroot" class="directive"><code class="directive">DocumentRoot</code></a>. URLs with a
(%-decoded) path beginning with <em>url-path</em> will be mapped
to local files beginning with <em>directory-filename</em>.</p>
<p>Example:</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>Alias /image /ftp/pub/image</code></td></tr></table></blockquote>
<p>A request for http://myserver/image/foo.gif would cause the
server to return the file /ftp/pub/image/foo.gif.</p>
<p>Note that if you include a trailing / on the
<em>url-path</em> then the server will require a trailing / in
order to expand the alias. That is, if you use <code>Alias
/icons/ /usr/local/apache/icons/</code> then the url
<code>/icons</code> will not be aliased.</p>
<p>Note that you may need to specify additional <a href="core.html#<directory>" class="directive"><code class="directive"><Directory></code></a> sections which cover
the <em>destination</em> of aliases. Aliasing occurs before
<a href="core.html#<directory>" class="directive"><code class="directive"><Directory></code></a> sections
are checked, so only the destination of aliases are affected.
(Note however <a href="core.html#<location>" class="directive"><code class="directive"><Location></code></a>
sections are run through once before aliases are performed, so
they will apply.)</p>
<hr/><h2><a name="AliasMatch">AliasMatch</a> <a name="aliasmatch">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Maps URLs to filesystem locations using regular
expressions</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>AliasMatch <em>regex
file-path</em>|<em>directory-path</em></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_alias</td></tr></table></td></tr></table>
<p>This directive is equivalent to <a href="#alias" class="directive"><code class="directive">Alias</code></a>, but makes use of standard
regular expressions, instead of simple prefix matching. The
supplied regular expression is matched against the URL-path, and
if it matches, the server will substitute any parenthesized
matches into the given string and use it as a filename. For
example, to activate the <code>/icons</code> directory, one might
use:</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
AliasMatch ^/icons(.*) /usr/local/apache/icons$1
</code></td></tr></table></blockquote>
<hr/><h2><a name="Redirect">Redirect</a> <a name="redirect">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Sends an external redirect asking the client to fetch
a different URL</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>Redirect [<em>status</em>] <em>URL-path URL</em></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host, directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>FileInfo</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_alias</td></tr></table></td></tr></table>
<p>The Redirect directive maps an old URL into a new one. The
new URL is returned to the client which attempts to fetch it
again with the new address. <em>URL-path</em> a (%-decoded)
path; any requests for documents beginning with this path will
be returned a redirect error to a new (%-encoded) URL beginning
with <em>URL</em>.</p>
<p>Example:</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>Redirect /service http://foo2.bar.com/service</code></td></tr></table></blockquote>
<p>If the client requests http://myserver/service/foo.txt, it
will be told to access http://foo2.bar.com/service/foo.txt
instead.</p>
<blockquote><table><tr><td bgcolor="#e0e5f5"><p align="center"><strong>Note</strong></p> <p>Redirect directives take precedence over
Alias and ScriptAlias directives, irrespective of their ordering in
the configuration file. Also, <em>URL-path</em> must be an absolute
path, not a relative path, even when used with .htaccess files or
inside of <a href="core.html#<directory>" class="directive"><code class="directive"><Directory></code></a>
sections.</p></td></tr></table></blockquote>
<p>If no <em>status</em> argument is given, the redirect will
be "temporary" (HTTP status 302). This indicates to the client
that the resource has moved temporarily. The <em>status</em>
argument can be used to return other HTTP status codes:</p>
<dl>
<dt>permanent</dt>
<dd>Returns a permanent redirect status (301) indicating that
the resource has moved permanently.</dd>
<dt>temp</dt>
<dd>Returns a temporary redirect status (302). This is the
default.</dd>
<dt>seeother</dt>
<dd>Returns a "See Other" status (303) indicating that the
resource has been replaced.</dd>
<dt>gone</dt>
<dd>Returns a "Gone" status (410) indicating that the
resource has been permanently removed. When this status is
used the <em>url</em> argument should be omitted.</dd>
</dl>
<p>Other status codes can be returned by giving the numeric
status code as the value of <em>status</em>. If the status is
between 300 and 399, the <em>url</em> argument must be present,
otherwise it must be omitted. Note that the status must be
known to the Apache code (see the function
<code>send_error_response</code> in http_protocol.c).</p>
<p>Example:</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
Redirect permanent /one http://example.com/two<br>
Redirect 303 /three http://example.com/other
</code></td></tr></table></blockquote>
<hr/><h2><a name="RedirectMatch">RedirectMatch</a> <a name="redirectmatch">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Sends an external redirect asking the client to fetch
a different URL based on a regular expression match of the
current URL</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>RedirectMatch [<em>status</em>] <em>regex URL</em></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host, directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>FileInfo</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_alias</td></tr></table></td></tr></table>
<p>This directive is equivalent to <a href="#redirect" class="directive"><code class="directive">Redirect</code></a>, but makes use of standard
regular expressions, instead of simple prefix matching. The
supplied regular expression is matched against the URL-path, and
if it matches, the server will substitute any parenthesized
matches into the given string and use it as a filename. For
example, to redirect all GIF files to like-named JPEG files on
another server, one might use:</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
RedirectMatch (.*)\.gif$ http://www.anotherserver.com$1.jpg
</code></td></tr></table></blockquote>
<hr/><h2><a name="RedirectPermanent">RedirectPermanent</a> <a name="redirectpermanent">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Sends an external permanent redirect asking the client to fetch
a different URL</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>RedirectPermanent <em>URL-path URL</em></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host, directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>FileInfo</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_alias</td></tr></table></td></tr></table>
<p>This directive makes the client know that the Redirect is
permanent (status 301). Exactly equivalent to <code>Redirect
permanent</code>.</p>
<hr/><h2><a name="RedirectTemp">RedirectTemp</a> <a name="redirecttemp">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Sends an external temporary redirect asking the client to fetch
a different URL</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>RedirectTemp <em>URL-path URL</em></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host, directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>FileInfo</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_alias</td></tr></table></td></tr></table>
<p>This directive makes the client know that the Redirect is
only temporary (status 302). Exactly equivalent to
<code>Redirect temp</code>.</p>
<hr/><h2><a name="ScriptAlias">ScriptAlias</a> <a name="scriptalias">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Maps a URL to a filesystem location and designates the
target as a CGI script</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>ScriptAlias
<em>URL-path file-path</em>|<em>directory-path</em></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_alias</td></tr></table></td></tr></table>
<p>The <code class="directive">ScriptAlias</code> directive has the same
behavior as the <a href="#alias" class="directive"><code class="directive">Alias</code></a>
directive, except that in addition it marks the target directory
as containing CGI scripts that will be processed by <code><a href="mod_cgi.html">mod_cgi</a></code>'s cgi-script handler. URLs with a
(%-decoded) path beginning with <em>URL-path</em> will be mapped
to scripts beginning with the second argument which is a full
pathname in the local filesystem.</p>
<p>Example:</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>ScriptAlias /cgi-bin/ /web/cgi-bin/</code></td></tr></table></blockquote>
<p>A request for <code>http://myserver/cgi-bin/foo</code> would cause the
server to run the script <code>/web/cgi-bin/foo</code>.</p>
<hr/><h2><a name="ScriptAliasMatch">ScriptAliasMatch</a> <a name="scriptaliasmatch">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Maps a URL to a filesystem location using a regular expression
and designates the target as a CGI script</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>ScriptAliasMatch
<em>regex file-path</em>|<em>directory-path</em></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_alias</td></tr></table></td></tr></table>
<p>This directive is equivalent to <a href="#scriptalias" class="directive"><code class="directive">ScriptAlias</code></a>, but makes use of standard
regular expressions, instead of simple prefix matching. The
supplied regular expression is matched against the URL-path,
and if it matches, the server will substitute any parenthesized
matches into the given string and use it as a filename. For
example, to activate the standard <code>/cgi-bin</code>, one
might use:</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
ScriptAliasMatch ^/cgi-bin(.*) /usr/local/apache/cgi-bin$1
</code></td></tr></table></blockquote>
<hr/></blockquote><h3 align="center">Apache HTTP Server Version 2.0</h3><a href="./"><img src="../images/index.gif" alt="Index"/></a><a href="../"><img src="../images/home.gif" alt="Home"/></a></body></html>
1.1 httpd-2.0/docs/manual/mod/mod_asis.html.en
Index: mod_asis.html.en
===================================================================
<html xmlns="http://www.w3.org/TR/xhtml1/strict"><head><!--
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
This file is generated from xml source: DO NOT EDIT
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
--><title>mod_asis- Apache HTTP Server</title><link href="../style/manual.css" type="text/css" rel="stylesheet"/></head><body><blockquote><div align="center"><img src="../images/sub.gif" alt="[APACHE DOCUMENTATION]"/><h3>Apache HTTP Server Version 2.0</h3></div><h1 align="center">Apache Module mod_asis</h1><table cellspacing="1" cellpadding="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td valign="top"><span class="help">Description:</span></td><td>Sends files that contain their own
HTTP headers</td></tr><tr><td><a href="module-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="module-dict.html#ModuleIdentifier" class="help">Module Identifier:</a></td><td>asis_module</td></tr></table></td></tr></table><h2>Summary</h2>
<p>This module provides the handler <code>send-as-is</code>
which causes Apache to send the document without adding most of
the usual HTTP headers.</p>
<p>This can be used to send any kind of data from the server,
including redirects and other special HTTP responses, without
requiring a cgi-script or an nph script.</p>
<p>For historical reasons, this module will also process any
file with the mime type <code>httpd/send-as-is</code>.</p>
<h2>Directives</h2><p/><h2>Usage</h2>
<p>In the server configuration file, associate files with the
<code>send-as-is</code> handler <em>e.g.</em></p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>AddHandler send-as-is asis</code></td></tr></table></blockquote>
<p>The contents of any file with a <code>.asis</code> extension
will then be sent by Apache to the client with almost no
changes. Clients will need HTTP headers to be attached, so do
not forget them. A Status: header is also required; the data
should be the 3-digit HTTP response code, followed by a textual
message.</p>
<p>Here's an example of a file whose contents are sent <em>as
is</em> so as to tell the client that a file has
redirected.</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>Status: 301 Now where did I leave that URL<br>
Location: http://xyz.abc.com/foo/bar.html<br>
Content-type: text/html<br>
<br>
<HTML><br>
<HEAD><br>
<TITLE>Lame excuses'R'us</TITLE><br>
</HEAD><br>
<BODY><br>
<H1>Fred's exceptionally wonderful page has moved
to<br>
<A
HREF="http://xyz.abc.com/foo/bar.html">Joe's</A>
site.<br>
</H1><br>
</BODY><br>
</HTML>
</code></td></tr></table></blockquote>
<p>Notes: the server always adds a Date: and Server: header to
the data returned to the client, so these should not be
included in the file. The server does <em>not</em> add a
Last-Modified header; it probably should. </p>
<hr/></blockquote><h3 align="center">Apache HTTP Server Version 2.0</h3><a href="./"><img src="../images/index.gif" alt="Index"/></a><a href="../"><img src="../images/home.gif" alt="Home"/></a></body></html>
1.1 httpd-2.0/docs/manual/mod/mod_auth.html.en
Index: mod_auth.html.en
===================================================================
<html xmlns="http://www.w3.org/TR/xhtml1/strict"><head><!--
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
This file is generated from xml source: DO NOT EDIT
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
--><title>mod_auth- Apache HTTP Server</title><link href="../style/manual.css" type="text/css" rel="stylesheet"/></head><body><blockquote><div align="center"><img src="../images/sub.gif" alt="[APACHE DOCUMENTATION]"/><h3>Apache HTTP Server Version 2.0</h3></div><h1 align="center">Apache Module mod_auth</h1><table cellspacing="1" cellpadding="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td valign="top"><span class="help">Description:</span></td><td>User authentication using text files</td></tr><tr><td><a href="module-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="module-dict.html#ModuleIdentifier" class="help">Module Identifier:</a></td><td>auth_module</td></tr></table></td></tr></table><h2>Summary</h2>
<p>This module allows the use of HTTP Basic Authentication to
restrict access by looking up users in plain text password and
group files. Similar functionality and greater scalability is
provided by <code><a href="mod_auth_dbm.html">mod_auth_dbm</a></code>. HTTP Digest
Authentication is provided by
<code><a href="mod_auth_digest.html">mod_auth_digest</a></code>.</p>
<h2>Directives</h2><ul><li><a href="#authauthoritative">AuthAuthoritative</a></li><li><a href="#authgroupfile">AuthGroupFile</a></li><li><a href="#authuserfile">AuthUserFile</a></li></ul><p><strong>See also </strong></p><ul><li><a href="core.html#require" class="directive"><code class="directive">Require</code></a></li><li><a href="core.html#satisfy" class="directive"><code class="directive">Satisfy</code></a></li><li><a href="core.html#authname" class="directive"><code class="directive">AuthName</code></a></li><li><a href="core.html#authtype" class="directive"><code class="directive">AuthType</code></a></li></ul><hr/><h2><a name="AuthAuthoritative">AuthAuthoritative</a> <a name="authauthoritative">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Sets whether authorization and authentication are
passed to lower level modules</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>AuthAuthoritative on|off</td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>AuthAuthoritative on</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>AuthConfig</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_auth</td></tr></table></td></tr></table>
<blockquote><table><tr><td bgcolor="#e0e5f5">This information has not been updated for Apache 2.0, which
uses a different system for module ordering.</td></tr></table></blockquote>
<p>Setting the <code class="directive">AuthAuthoritative</code> directive
explicitly to <strong>'off'</strong> allows for both
authentication and authorization to be passed on to lower level
modules (as defined in the <code>Configuration</code> and
<code>modules.c</code> files) if there is <strong>no
userID</strong> or <strong>rule</strong> matching the supplied
userID. If there is a userID and/or rule specified; the usual
password and access checks will be applied and a failure will give
an Authorization Required reply.</p>
<p>So if a userID appears in the database of more than one module;
or if a valid <a href="core.html#require" class="directive"><code class="directive">Require</code></a>
directive applies to more than one module; then the first module
will verify the credentials; and no access is passed on;
regardless of the AuthAuthoritative setting.</p>
<p>A common use for this is in conjunction with one of the
database modules; such as <code><a href="auth_dbm.html">auth_dbm</a></code>,
<code>mod_auth_msql</code>, and <code><a href="mod_auth_anon.html">mod_auth_anon</a></code>.
These modules supply the bulk of the user credential checking; but
a few (administrator) related accesses fall through to a lower
level with a well protected <a href="#authuserfile" class="directive"><code class="directive">AuthUserFile</code></a>.</p>
<p>By default; control is not passed on; and an unknown userID or
rule will result in an Authorization Required reply. Not setting
it thus keeps the system secure; and forces an NCSA compliant
behaviour.</p>
<blockquote><table><tr><td bgcolor="#e0e5f5"><p align="center"><strong>Security</strong></p> Do consider the implications of
allowing a user to allow fall-through in his .htaccess file; and
verify that this is really what you want; Generally it is easier
to just secure a single .htpasswd file, than it is to secure a
database such as mSQL. Make sure that the <a href="#authuserfile" class="directive"><code class="directive">AuthUserFile</code></a> is stored outside the
document tree of the web-server; do <em>not</em> put it in the
directory that it protects. Otherwise, clients will be able to
download the <a href="#authuserfile" class="directive"><code class="directive">AuthUserFile</code></a>.
</td></tr></table></blockquote>
<hr/><h2><a name="AuthGroupFile">AuthGroupFile</a> <a name="authgroupfile">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Sets the name of a text file containing the list
of user groups for authentication</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>AuthGroupFile <em>file-path</em></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>AuthConfig</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_auth</td></tr></table></td></tr></table>
<p>The <code class="directive">AuthGroupFile</code> directive sets the
name of a textual file containing the list of user groups for user
authentication. <em>File-path</em> is the path to the group
file. If it is not absolute (<em>i.e.</em>, if it doesn't begin
with a slash), it is treated as relative to the <a href="core.html#serverroot" class="directive"><code class="directive">ServerRoot</code></a>.</p>
<p>Each line of the group file contains a groupname followed by a
colon, followed by the member usernames separated by spaces.
Example:</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>mygroup: bob joe anne</code></td></tr></table></blockquote>
<p>Note that searching large text files is <em>very</em>
inefficient; <a href="mod_auth_dbm.html#authdbmgroupfile" class="directive"><code class="directive">AuthDBMGroupFile</code></a> should be used
instead.</p>
<blockquote><table><tr><td bgcolor="#e0e5f5"><p align="center"><strong>Security</strong></p>
<p>Make sure that the AuthGroupFile is stored outside
the document tree of the web-server; do <em>not</em> put it in
the directory that it protects. Otherwise, clients will be able
to download the AuthGroupFile.</p>
</td></tr></table></blockquote>
<hr/><h2><a name="AuthUserFile">AuthUserFile</a> <a name="authuserfile">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Sets the name of a text file containing the list of users and
passwords for authentication</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>AuthUserFile <em>file-path</em></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>AuthConfig</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_auth</td></tr></table></td></tr></table>
<p>The <code class="directive">AuthUserFile</code> directive sets the name
of a textual file containing the list of users and passwords for
user authentication. <em>File-path</em> is the path to the user
file. If it is not absolute (<em>i.e.</em>, if it doesn't begin
with a slash), it is treated as relative to the <a href="core.html#serverroot" class="directive"><code class="directive">ServerRoot</code></a>.</p>
<p>Each line of the user file file contains a username followed by
a colon, followed by the <code>crypt()</code> encrypted
password. The behavior of multiple occurrences of the same user is
undefined.</p>
<p>The utility <a href="../programs/htpasswd.html">htpasswd</a>
which is installed as part of the binary distribution, or which
can be found in <code>src/support</code>, is used to maintain
this password file. See the <code>man</code> page for more
details. In short:</p>
<p>Create a password file 'Filename' with 'username' as the
initial ID. It will prompt for the password:</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>htpasswd -c Filename username</code></td></tr></table></blockquote>
<p>Adds or modifies in password file 'Filename' the 'username':</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>htpasswd Filename username2</code></td></tr></table></blockquote>
<p>Note that searching large text files is <em>very</em>
inefficient; <a href="mod_auth_dbm.html#authdbmuserfile" class="directive"><code class="directive">AuthDBMUserFile</code></a> should be used
instead.</p>
<blockquote><table><tr><td bgcolor="#e0e5f5"><p align="center"><strong>Security</strong></p><p>Make sure that the AuthUserFile is
stored outside the document tree of the web-server; do <em>not</em>
put it in the directory that it protects. Otherwise, clients will be
able to download the AuthUserFile.</p></td></tr></table></blockquote>
<hr/></blockquote><h3 align="center">Apache HTTP Server Version 2.0</h3><a href="./"><img src="../images/index.gif" alt="Index"/></a><a href="../"><img src="../images/home.gif" alt="Home"/></a></body></html>
1.1 httpd-2.0/docs/manual/mod/mod_auth_anon.html.en
Index: mod_auth_anon.html.en
===================================================================
<html xmlns="http://www.w3.org/TR/xhtml1/strict"><head><!--
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
This file is generated from xml source: DO NOT EDIT
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
--><title>mod_auth_anon- Apache HTTP Server</title><link href="../style/manual.css" type="text/css" rel="stylesheet"/></head><body><blockquote><div align="center"><img src="../images/sub.gif" alt="[APACHE DOCUMENTATION]"/><h3>Apache HTTP Server Version 2.0</h3></div><h1 align="center">Apache Module mod_auth_anon</h1><table cellspacing="1" cellpadding="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td valign="top"><span class="help">Description:</span></td><td>Allows "anonymous" user access to authenticated
areas</td></tr><tr><td><a href="module-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="module-dict.html#ModuleIdentifier" class="help">Module Identifier:</a></td><td>auth_anon_module</td></tr></table></td></tr></table><h2>Summary</h2>
<p>This module does access control in a manner similar to
anonymous-ftp sites; <em>i.e.</em> have a 'magic' user id
'anonymous' and the email address as a password. These email
addresses can be logged.</p>
<p>Combined with other (database) access control methods, this
allows for effective user tracking and customization according
to a user profile while still keeping the site open for
'unregistered' users. One advantage of using Auth-based user
tracking is that, unlike magic-cookies and funny URL
pre/postfixes, it is completely browser independent and it
allows users to share URLs.</p>
<h2>Directives</h2><ul><li><a href="#anonymous">Anonymous</a></li><li><a href="#anonymous_authoritative">Anonymous_Authoritative</a></li><li><a href="#anonymous_logemail">Anonymous_LogEmail</a></li><li><a href="#anonymous_mustgiveemail">Anonymous_MustGiveEmail</a></li><li><a href="#anonymous_nouserid">Anonymous_NoUserID</a></li><li><a href="#anonymous_verifyemail">Anonymous_VerifyEmail</a></li></ul><h2>Example</h2>
<p>The example below (when combined with the Auth directives of a
htpasswd-file based (or GDM, mSQL <em>etc.</em>) base access
control system allows users in as 'guests' with the following
properties:</p>
<ul>
<li>It insists that the user enters a userId.
(<code>Anonymous_NoUserId</code>)</li>
<li>It insists that the user enters a password.
(<code>Anonymous_MustGiveEmail</code>)</li>
<li>The password entered must be a valid email address, ie.
contain at least one '@' and a '.'.
(<code>Anonymous_VerifyEmail</code>)</li>
<li>The userID must be one of <code>anonymous guest www test
welcome</code> and comparison is <strong>not</strong> case
sensitive.</li>
<li>And the Email addresses entered in the passwd field are
logged to the error log file
(<code>Anonymous_LogEmail</code>)</li>
</ul>
<p>Excerpt of httpd.conf:</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
Anonymous_NoUserId off<br>
Anonymous_MustGiveEmail on<br>
Anonymous_VerifyEmail on<br>
Anonymous_LogEmail on<br>
Anonymous anonymous guest www test welcome<br>
<br>
AuthName "Use 'anonymous' & Email address for
guest entry"<br>
AuthType basic<br>
<br>
# An
AuthUserFile/AuthDBUserFile/AuthDBMUserFile<br>
# directive must be specified, or use<br>
# Anonymous_Authoritative for public access.<br>
# In the .htaccess for the public directory, add:<br>
<Files *><br>
Order Deny,Allow<br>
Allow from all<br>
<br>
Require valid-user<br>
</Files><br>
</code></td></tr></table></blockquote>
<hr/><h2><a name="Anonymous">Anonymous</a> <a name="anonymous">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Specifies userIDs that areallowed access without
password verification</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>Anonymous <em>user</em> [<em>user</em>] ...</td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>AuthConfig</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_auth_anon</td></tr></table></td></tr></table>
<p>A list of one or more 'magic' userIDs which are allowed
access without password verification. The userIDs are space
separated. It is possible to use the ' and " quotes to allow a
space in a userID as well as the \ escape character.</p>
<p>Please note that the comparison is
<strong>case-IN-sensitive</strong>.<br>
I strongly suggest that the magic username
'<code>anonymous</code>' is always one of the allowed
userIDs.</p>
<p>Example:</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>Anonymous anonymous "Not Registered" 'I don\'t know'</code></td></tr></table></blockquote>
<p>This would allow the user to enter without password
verification by using the userId's 'anonymous',
'AnonyMous','Not Registered' and 'I Don't Know'.</p>
<hr/><h2><a name="Anonymous_Authoritative">Anonymous_Authoritative</a> <a name="anonymous_authoritative">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Configures if authorization will fall-through
to other methods</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>Anonymous_Authoritative on|off</td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>Anonymous_Authoritative off</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>AuthConfig</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_auth_anon</td></tr></table></td></tr></table>
<p>When set 'on', there is no fall-through to other authorization
methods. So if a userID does not match the values specified in the
<a href="#anonymous" class="directive"><code class="directive">Anonymous</code></a> directive,
access is denied.</p>
<p>Be sure you know what you are doing when you decide to
switch it on. And remember that it is the linking order of the
modules (in the Configuration / Make file) which details the
order in which the Authorization modules are queried.</p>
<hr/><h2><a name="Anonymous_LogEmail">Anonymous_LogEmail</a> <a name="anonymous_logemail">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Sets whether the password entered will be logged in the
error log</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>Anonymous_LogEmail on|off</td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>Anonymous_LogEmail on</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>AuthConfig</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_auth_anon</td></tr></table></td></tr></table>
<p>When set <code>on</code>, the default, the 'password' entered
(which hopefully contains a sensible email address) is logged in
the error log.</p>
<hr/><h2><a name="Anonymous_MustGiveEmail">Anonymous_MustGiveEmail</a> <a name="anonymous_mustgiveemail">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Specifies whether blank passwords are allowed</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>Anonymous_MustGiveEmail on|off</td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>Anonymous_MustGiveEmail on</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>AuthConfig</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_auth_anon</td></tr></table></td></tr></table>
<p>Specifies whether the user must specify an email address as
the password. This prohibits blank passwords.</p>
<hr/><h2><a name="Anonymous_NoUserID">Anonymous_NoUserID</a> <a name="anonymous_nouserid">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Sets whether the userID field may be empty</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>Anonymous_NoUserID on|off</td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>Anonymous_NoUserID off</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>AuthConfig</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_auth_anon</td></tr></table></td></tr></table>
<p>When set <code>on</code>, users can leave the userID (and
perhaps the password field) empty. This can be very convenient for
MS-Explorer users who can just hit return or click directly on the
OK button; which seems a natural reaction.</p>
<hr/><h2><a name="Anonymous_VerifyEmail">Anonymous_VerifyEmail</a> <a name="anonymous_verifyemail">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Sets whether to check the password field for a correctly
formatted email address</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>Anonymous_VerifyEmail on|off</td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>Anonymous_VerifyEmail off</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>AuthConfig</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_auth_anon</td></tr></table></td></tr></table>
<p>When set <code>on</code> the 'password' entered is checked for
at least one '@' and a '.' to encourage users to enter valid email
addresses (see the above <a href="#auth_logemail" class="directive"><code class="directive">Auth_LogEmail</code></a>).</p>
<hr/></blockquote><h3 align="center">Apache HTTP Server Version 2.0</h3><a href="./"><img src="../images/index.gif" alt="Index"/></a><a href="../"><img src="../images/home.gif" alt="Home"/></a></body></html>
1.1 httpd-2.0/docs/manual/mod/mod_auth_dbm.html.en
Index: mod_auth_dbm.html.en
===================================================================
<html xmlns="http://www.w3.org/TR/xhtml1/strict"><head><!--
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
This file is generated from xml source: DO NOT EDIT
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
--><title>mod_auth_dbm- Apache HTTP Server</title><link href="../style/manual.css" type="text/css" rel="stylesheet"/></head><body><blockquote><div align="center"><img src="../images/sub.gif" alt="[APACHE DOCUMENTATION]"/><h3>Apache HTTP Server Version 2.0</h3></div><h1 align="center">Apache Module mod_auth_dbm</h1><table cellspacing="1" cellpadding="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td valign="top"><span class="help">Description:</span></td><td>Provides for user authentication using DBM
files</td></tr><tr><td><a href="module-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="module-dict.html#ModuleIdentifier" class="help">Module Identifier:</a></td><td>auth_dbm_module</td></tr></table></td></tr></table><h2>Summary</h2>
<p>This module provides for HTTP Basic Authentication, where
the usernames and passwords are stored in DBM type database
files. It is an alternative to the plain text password files
provided by <code><a href="mod_auth.html">mod_auth</a></code>.</p>
<h2>Directives</h2><ul><li><a href="#authdbmauthoritative">AuthDBMAuthoritative</a></li><li><a href="#authdbmgroupfile">AuthDBMGroupFile</a></li><li><a href="#authdbmtype">AuthDBMType</a></li><li><a href="#authdbmuserfile">AuthDBMUserFile</a></li></ul><p><strong>See also </strong></p><ul><li><a href="core.html#authname" class="directive"><code class="directive">AuthName</code></a></li><li><a href="core.html#authtype" class="directive"><code class="directive">AuthType</code></a></li><li><a href="core.html#require" class="directive"><code class="directive">Require</code></a></li><li><a href="core.html#satisfy" class="directive"><code class="directive">Satisfy</code></a></li></ul><hr/><h2><a name="AuthDBMAuthoritative">AuthDBMAuthoritative</a> <a name="authdbmauthoritative">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Sets whether authentication and authorization will be
passwed on to lower level modules</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>AuthDBMAuthoritative on|off</td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>AuthDBMAuthoritative on</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>AuthConfig</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_auth_dbm</td></tr></table></td></tr></table>
<blockquote><table><tr><td bgcolor="#e0e5f5">This information has not been updated to take into account the
new module ordering techniques in Apache 2.0</td></tr></table></blockquote>
<p>Setting the <code class="directive">AuthDBMAuthoritative</code>
directive explicitly to <strong>'off'</strong> allows for both
authentication and authorization to be passed on to lower level
modules (as defined in the <code>Configuration</code> and
<code>modules.c</code> file if there is <strong>no userID</strong>
or <strong>rule</strong> matching the supplied userID. If there is
a userID and/or rule specified; the usual password and access
checks will be applied and a failure will give an Authorization
Required reply.</p>
<p>So if a userID appears in the database of more than one module;
or if a valid <a href="core.html#require" class="directive"><code class="directive">Require</code></a>
directive applies to more than one module; then the first module
will verify the credentials; and no access is passed on;
regardless of the <code class="directive">AuthAuthoritative</code> setting.</p>
<p>A common use for this is in conjunction with one of the
basic auth modules; such as <code><a href="mod_auth.html">mod_auth</a></code>. Whereas this
DBM module supplies the bulk of the user credential checking; a
few (administrator) related accesses fall through to a lower
level with a well protected .htpasswd file.</p>
<p>By default, control is not passed on and an unknown userID
or rule will result in an Authorization Required reply. Not
setting it thus keeps the system secure and forces an NCSA
compliant behaviour.</p>
<p>Security: Do consider the implications of allowing a user to
allow fall-through in his .htaccess file; and verify that this
is really what you want; Generally it is easier to just secure
a single .htpasswd file, than it is to secure a database which
might have more access interfaces.</p>
<hr/><h2><a name="AuthDBMGroupFile">AuthDBMGroupFile</a> <a name="authdbmgroupfile">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Sets the name of the database file containing the list
of user groups for authentication</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>AuthDBMGroupFile <em>file-path</em></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>AuthConfig</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_auth_dbm</td></tr></table></td></tr></table>
<p>The <code class="directive">AuthDBMGroupFile</code> directive sets the
name of a DBM file containing the list of user groups for user
authentication. <em>File-path</em> is the absolute path to the
group file.</p>
<p>The group file is keyed on the username. The value for a
user is a comma-separated list of the groups to which the users
belongs. There must be no whitespace within the value, and it
must never contain any colons.</p>
<p>Security: make sure that the
<code class="directive">AuthDBMGroupFile</code> is stored outside the
document tree of the web-server; do <em>not</em> put it in the
directory that it protects. Otherwise, clients will be able to
download the <code class="directive">AuthDBMGroupFile</code> unless
otherwise protected.</p>
<p>Combining Group and Password DBM files: In some cases it is
easier to manage a single database which contains both the
password and group details for each user. This simplifies any
support programs that need to be written: they now only have to
deal with writing to and locking a single DBM file. This can be
accomplished by first setting the group and password files to
point to the same DBM:</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
AuthDBMGroupFile /www/userbase<br>
AuthDBMUserFile /www/userbase
</code></td></tr></table></blockquote>
<p>The key for the single DBM is the username. The value consists
of</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>Unix Crypt-ed Password : List of Groups [ : (ignored)
]</code></td></tr></table></blockquote>
<p>The password section contains the Unix <code>crypt()</code>
password as before. This is followed by a colon and the comma
separated list of groups. Other data may optionally be left in the
DBM file after another colon; it is ignored by the authentication
module. This is what www.telescope.org uses for its combined
password and group database.</p>
<hr/><h2><a name="AuthDBMType">AuthDBMType</a> <a name="authdbmtype">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Sets the type of database file that is used to
store passwords</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>AuthDBMType default|SDBM|GDBM|DB</td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>AuthDBMType default</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>AuthConfig</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_auth_dbm</td></tr><tr><td align="left" valign="top"><a href="directive-dict.html#Compatibility" class="help">Compatibility:</a></td><td>Available in version 2.0.30 and later.</td></tr></table></td></tr></table>
<p>Sets the type of database file that is used to store the passwords.
The default database type is determined at compile time. The
availability of other types of database files also depends on
compile-time settings.</p>
<p>It is crucial that whatever program you use to create your password
files is configured to use the same type of database.</p>
<hr/><h2><a name="AuthDBMUserFile">AuthDBMUserFile</a> <a name="authdbmuserfile">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Sets thename of a database file containing the list of users and
passwords for authentication</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>AuthDBMUserFile <em>file-path</em></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>AuthConfig</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_auth_dbm</td></tr></table></td></tr></table>
<p>The <code class="directive">AuthDBMUserFile</code> directive sets the
name of a DBM file containing the list of users and passwords for
user authentication. <em>File-path</em> is the absolute path to
the user file.</p>
<p>The user file is keyed on the username. The value for a user is
the <code>crypt()</code> encrypted password, optionally followed
by a colon and arbitrary data. The colon and the data following it
will be ignored by the server.</p>
<p>Security: make sure that the
<code class="directive">AuthDBMUserFile</code> is stored outside the
document tree of the web-server; do <em>not</em> put it in the
directory that it protects. Otherwise, clients will be able to
download the <code class="directive">AuthDBMUserFile</code>.</p>
<p>Important compatibility note: The implementation of
"dbmopen" in the apache modules reads the string length of the
hashed values from the DBM data structures, rather than relying
upon the string being NULL-appended. Some applications, such as
the Netscape web server, rely upon the string being
NULL-appended, so if you are having trouble using DBM files
interchangeably between applications this may be a part of the
problem.</p>
<p>A perl script called
<a href="../programs/dbmmanage.html">dbmmanage</a> is included with
Apache. This program can be used to create and update DBM
format password files for use with this module.</p>
<hr/></blockquote><h3 align="center">Apache HTTP Server Version 2.0</h3><a href="./"><img src="../images/index.gif" alt="Index"/></a><a href="../"><img src="../images/home.gif" alt="Home"/></a></body></html>
1.1 httpd-2.0/docs/manual/mod/mod_auth_digest.html.en
Index: mod_auth_digest.html.en
===================================================================
<html xmlns="http://www.w3.org/TR/xhtml1/strict"><head><!--
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
This file is generated from xml source: DO NOT EDIT
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
--><title>mod_auth_digest- Apache HTTP Server</title><link href="../style/manual.css" type="text/css" rel="stylesheet"/></head><body><blockquote><div align="center"><img src="../images/sub.gif" alt="[APACHE DOCUMENTATION]"/><h3>Apache HTTP Server Version 2.0</h3></div><h1 align="center">Apache Module mod_auth_digest</h1><table cellspacing="1" cellpadding="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td valign="top"><span class="help">Description:</span></td><td>User authentication using MD5
Digest Authentication.</td></tr><tr><td><a href="module-dict.html#Status" class="help">Status:</a></td><td>Experimental</td></tr><tr><td><a href="module-dict.html#ModuleIdentifier" class="help">Module Identifier:</a></td><td>auth_digest_module</td></tr></table></td></tr></table><h2>Summary</h2>
<p>This module implements HTTP Digest Authentication. However, it
has not been extensively tested and is therefore marked
experimental.</p>
<h2>Directives</h2><ul><li><a href="#authdigestalgorithm">AuthDigestAlgorithm</a></li><li><a href="#authdigestdomain">AuthDigestDomain</a></li><li><a href="#authdigestfile">AuthDigestFile</a></li><li><a href="#authdigestgroupfile">AuthDigestGroupFile</a></li><li><a href="#authdigestnccheck">AuthDigestNcCheck</a></li><li><a href="#authdigestnonceformat">AuthDigestNonceFormat</a></li><li><a href="#authdigestnoncelifetime">AuthDigestNonceLifetime</a></li><li><a href="#authdigestqop">AuthDigestQop</a></li></ul><p><strong>See also </strong></p><ul><li><a href="core.html#authname" class="directive"><code class="directive">AuthName</code></a></li><li><a href="core.html#authtype" class="directive"><code class="directive">AuthType</code></a></li><li><a href="core.html#require" class="directive"><code class="directive">Require</code></a></li><li><a href="core.html#satisfy" class="directive"><code class="directive">Satisfy</code></a></li></ul><h2>Using Digest Authentication</h2>
<p>Using MD5 Digest authentication is very simple. Simply set
up authentication normally, using "AuthType Digest" and
"AuthDigestFile" instead of the normal "AuthType Basic" and
"AuthUserFile"; also, replace any "AuthGroupFile" with
"AuthDigestGroupFile". Then add a "AuthDigestDomain" directive
containing at least the root URI(s) for this protection space.
Example:</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
<Location /private/><br>
AuthType Digest<br>
AuthName "private area"<br>
AuthDigestDomain /private/ http://mirror.my.dom/private2/<br>
AuthDigestFile /web/auth/.digest_pw<br>
Require valid-user<br>
</Location>
</code></td></tr></table></blockquote>
<blockquote><table><tr><td bgcolor="#e0e5f5"><p align="center"><strong>Note</strong></p>
<p>MD5 authentication provides a more
secure password system than Basic authentication, but only
works with supporting browsers. As of this writing (October 2001),
the only major browsers which support digest authentication are
<a href="http://www.opera.com/">Opera 4.0</a>,
<a href="http://www.microsoft.com/windows/ie/">MS Internet
Explorer 5.0</a> and <a href="http://www.w3.org/Amaya/">Amaya</a>.
Therefore, we do not yet recommend using this feature on a large
Internet site. However, for personal and intra-net use, where
browser users can be controlled, it is ideal.</p>
</td></tr></table></blockquote>
<hr/><h2><a name="AuthDigestAlgorithm">AuthDigestAlgorithm</a> <a name="authdigestalgorithm">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Selects the algorithm used to calculate the challenge and
response hases in digest authentication</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>AuthDigestAlgorithm MD5|MD5-sess</td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>AuthDigestAlgorithm MD5</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>AuthConfig</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Experimental</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_auth_digest</td></tr></table></td></tr></table>
<p>The <code class="directive">AuthDigestAlgorithm</code> directive
selects the algorithm used to calculate the challenge and response
hashes.</p>
<p><strong><em>MD5-sess</em> is not correctly implemented
yet</strong>.
</p>
<hr/><h2><a name="AuthDigestDomain">AuthDigestDomain</a> <a name="authdigestdomain">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>URIs that are in the same protection space for digest
authentication</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>AuthDigestDomain <em>URI</em> [<em>URI</em>] ...</td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>AuthConfig</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Experimental</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_auth_digest</td></tr></table></td></tr></table>
<p>The <code class="directive">AuthDigestDomain</code> directive allows
you to specify one or more URIs which are in the same protection
space (i.e. use the same realm and username/password info). The
specified URIs are prefixes, i.e. the client will assume that all
URIs "below" these are also protected by the same
username/password. The URIs may be either absolute URIs
(i.e. inluding a scheme, host, port, etc) or relative URIs.</p>
<p>This directive <em>should</em> always be specified and
contain at least the (set of) root URI(s) for this space.
Omitting to do so will cause the client to send the
Authorization header for <em>every request</em> sent to this
server. Apart from increasing the size of the request, it may
also have a detrimental effect on performance if
"AuthDigestNcCheck" is on.</p>
<p>The URIs specified can also point to different servers, in
which case clients (which understand this) will then share
username/password info across multiple servers without
prompting the user each time. </p>
<hr/><h2><a name="AuthDigestFile">AuthDigestFile</a> <a name="authdigestfile">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Location of the text file containing the list
of users and encoded passwords for digest authentication</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>AuthDigestFile <em>file-path</em></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>AuthConfig</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Experimental</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_auth_digest</td></tr></table></td></tr></table>
<p>The <code class="directive">AuthDigestFile</code> directive sets the
name of a textual file containing the list of users and encoded
passwords for digest authentication. <em>File-path</em> is the
absolute path to the user file.</p>
<p>The digest file uses a special format. Files in this format
can be created using the <a href="../programs/htdigest.html">htdigest</a> utility found in
the support/ subdirectory of the Apache distribution.</p>
<hr/><h2><a name="AuthDigestGroupFile">AuthDigestGroupFile</a> <a name="authdigestgroupfile">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Name of the text file containing the list of groups
for digest authentication</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>AuthDigestGroupFile <em>file-path</em></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>AuthConfig</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Experimental</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_auth_digest</td></tr></table></td></tr></table>
<p>The <code class="directive">AuthDigestGroupFile</code> directive sets
the name of a textual file containing the list of groups and their
members (user names). <em>File-path</em> is the absolute path to
the group file.</p>
<p>Each line of the group file contains a groupname followed by
a colon, followed by the member usernames separated by spaces.
Example:</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>mygroup: bob joe anne</code></td></tr></table></blockquote>
<p>Note that searching large text files is <em>very</em>
inefficient.</p>
<p>Security: make sure that the AuthGroupFile is stored outside
the document tree of the web-server; do <em>not</em> put it in
the directory that it protects. Otherwise, clients will be able
to download the AuthGroupFile.</p>
<hr/><h2><a name="AuthDigestNcCheck">AuthDigestNcCheck</a> <a name="authdigestnccheck">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Enables or disables checking of the nonce-count sent by the
server</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>AuthDigestNcCheck On|Off</td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>AuthDigestNcCheck Off</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Experimental</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_auth_digest</td></tr></table></td></tr></table>
<p><strong>Not implemented yet.</strong>
</p>
<hr/><h2><a name="AuthDigestNonceFormat">AuthDigestNonceFormat</a> <a name="authdigestnonceformat">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Determines how the nonce is generated</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>???</td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>???</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>AuthConfig</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Experimental</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_auth_digest</td></tr></table></td></tr></table>
<p><strong>Not implemented yet.</strong>
</p>
<hr/><h2><a name="AuthDigestNonceLifetime">AuthDigestNonceLifetime</a> <a name="authdigestnoncelifetime">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>How long the server nonce is valid</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>AuthDigestNonceLifetime <em>seconds</em></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>AuthDigestNonceLifetime 300</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>AuthConfig</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Experimental</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_auth_digest</td></tr></table></td></tr></table>
<p>The <code class="directive">AuthDigestNonceLifetime</code> directive
controls how long the server nonce is valid. When the client
contacts the server using an expired nonce the server will send
back a 401 with <code>stale=true</code>. If <em>seconds</em> is
greater than 0 then it specifies the amount of time for which the
nonce is valid; this should probably never be set to less than 10
seconds. If <em>seconds</em> is less than 0 then the nonce never
expires.
</p>
<hr/><h2><a name="AuthDigestQop">AuthDigestQop</a> <a name="authdigestqop">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Determines the quality-of-protection to use in digest
authentication</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>AuthDigestQop none|auth|auth-int [auth|auth-int]</td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>AuthDigestQop auth</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>AuthConfig</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Experimental</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_auth_digest</td></tr></table></td></tr></table>
<p>The <code class="directive">AuthDigestQop</code> directive determines
the quality-of-protection to use. <em>auth</em> will only do
authentication (username/password); <em>auth-int</em> is
authentication plus integrity checking (an MD5 hash of the entity
is also computed and checked); <em>none</em> will cause the module
to use the old RFC-2069 digest algorithm (which does not include
integrity checking). Both <em>auth</em> and <em>auth-int</em> may
be specified, in which the case the browser will choose which of
these to use. <em>none</em> should only be used if the browser for
some reason does not like the challenge it receives otherwise.</p>
<p><strong><em>auth-int</em> is not implemented
yet</strong>.</p>
<hr/></blockquote><h3 align="center">Apache HTTP Server Version 2.0</h3><a href="./"><img src="../images/index.gif" alt="Index"/></a><a href="../"><img src="../images/home.gif" alt="Home"/></a></body></html>
1.1 httpd-2.0/docs/manual/mod/mod_autoindex.html.en
Index: mod_autoindex.html.en
===================================================================
<html xmlns="http://www.w3.org/TR/xhtml1/strict"><head><!--
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
This file is generated from xml source: DO NOT EDIT
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
--><title>mod_autoindex- Apache HTTP Server</title><link href="../style/manual.css" type="text/css" rel="stylesheet"/></head><body><blockquote><div align="center"><img src="../images/sub.gif" alt="[APACHE DOCUMENTATION]"/><h3>Apache HTTP Server Version 2.0</h3></div><h1 align="center">Apache Module mod_autoindex</h1><table cellspacing="1" cellpadding="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td valign="top"><span class="help">Description:</span></td><td>Generates directory indexes,
automatically, similar to the Unix <em>ls</em> command or the
Win32 <em>dir</em> shell command</td></tr><tr><td><a href="module-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="module-dict.html#ModuleIdentifier" class="help">Module Identifier:</a></td><td>autoindex_module</td></tr></table></td></tr></table><h2>Summary</h2>
<p>The index of a directory can come from one of two
sources:</p>
<ul>
<li>A file written by the user, typically called
<code>index.html</code>. The <a href="mod_dir.html#directoryindex" class="directive"><code class="directive">DirectoryIndex</code></a> directive sets the
name of this file. This is controlled by
<code><a href="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 <a href="#addicon" class="directive"><code class="directive">AddIcon</code></a>, <a href="#addiconbyencoding" class="directive"><code class="directive">AddIconByEncoding</code></a> and
<a href="#addiconbytype" class="directive"><code class="directive">AddIconByType</code></a> 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><a href="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
<a href="core.html#options" class="directive"><code class="directive">Options</code></a> directive for
more details.</p>
<p>If the <a href="autoindex.html#fancyindexing" class="directive"><code class="directive">FancyIndexing</code></a>
option is given with the <a href="autoindex.html#indexoptions" class="directive"><code class="directive">IndexOptions</code></a> 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
<a href="autoindex.html#indexoptions" class="directive"><code class="directive">IndexOptions</code></a> directive's
<code>SuppressColumnSorting</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>
<h2>Directives</h2><ul><li><a href="#addalt">AddAlt</a></li><li><a href="#addaltbyencoding">AddAltByEncoding</a></li><li><a href="#addaltbytype">AddAltByType</a></li><li><a href="#adddescription">AddDescription</a></li><li><a href="#addicon">AddIcon</a></li><li><a href="#addiconbyencoding">AddIconByEncoding</a></li><li><a href="#addiconbytype">AddIconByType</a></li><li><a href="#defaulticon">DefaultIcon</a></li><li><a href="#headername">HeaderName</a></li><li><a href="#indexignore">IndexIgnore</a></li><li><a href="#indexoptions">IndexOptions</a></li><li><a href="#indexorderdefault">IndexOrderDefault</a></li><li><a href="#readmename">ReadmeName</a></li></ul><h2>Autoindex Request Query Arguments</h2>
<p>Apache 2.0.23 reorganized the Query Arguments for Column
Sorting, and introduced an entire group of new query options.
To effectively eliminate all client control over the output,
the <code><a href="#indexoptions:ignoreclient">IndexOptions
IgnoreClient</a></code> option was introduced.</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><code>C=D</code> sorts the directory by description, then
file name<br>
</li>
<li><code>O=A</code> sorts the listing in Ascending
Order</li>
<li><code>O=D</code> sorts the listing in Descending
Order<br>
</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><code>F=2</code> formats the listing as an HTMLTable
FancyIndexed list<br>
</li>
<li><code>V=0</code> disables version sorting</li>
<li><code>V=1</code> enables version sorting<br>
</li>
<li><code>P=<em>pattern</em></code> lists only files matching
the given <em>pattern</em></li>
</ul>
<p>Note that the 'P'attern query argument is tested
<em>after</em> the usual IndexIgnore directives are processed,
and all file names are still subjected to the same criteria as
any other autoindex listing. The Query Arguments parser in
mod_autoindex 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 mod_autoindex
encounters the X=Go input.</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
<FORM METHOD="GET"><br>
Show me a <SELECT NAME="F"><br>
<OPTION VALUE="0"> Plain list <br>
<OPTION VALUE="1" SELECTED> Fancy list<br>
<OPTION VALUE="2"> Table list<br>
</SELECT><br>
Sorted by <SELECT NAME="C"><br>
<OPTION VALUE="N" SELECTED> Name<br>
<OPTION VALUE="M"> Date Modified<br>
<OPTION VALUE="S"> Size<br>
<OPTION VALUE="D"> Description<br>
</SELECT><br>
<SELECT NAME="O"><br>
<OPTION VALUE="A" SELECTED> Ascending<br>
<OPTION VALUE="D"> Descending<br>
</SELECT><br>
<SELECT NAME="V"><br>
<OPTION VALUE="0" SELECTED> in Normal order<br>
<OPTION VALUE="1"> in Version order<br>
</SELECT><br>
Matching <INPUT TYPE="text" NAME="P" VALUE="*"><br>
<INPUT TYPE="submit" NAME="X" VALUE="Go"><br>
</FORM>
</code></td></tr></table></blockquote>
<hr/><h2><a name="AddAlt">AddAlt</a> <a name="addalt">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Alternate text to display for a file, instead of an
icon selected by filename</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>AddAlt <em>string file</em> [<em>file</em>] ...</td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host, directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>Indexes</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_autoindex</td></tr></table></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>.
<em>File</em> is a file extension, partial filename, wild-card
expression or full filename for files to describe.
<em>String</em> is enclosed in double quotes (<code>"</code>).
This alternate text is displayed if the client is image-incapable,
has image loading disabled, or fails to retrieve the icon.</p>
<p>Examples:</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
AddAlt "PDF" *.pdf<br>
AddAlt "Compressed" *.gz *.zip *.Z
</code></td></tr></table></blockquote>
<hr/><h2><a name="AddAltByEncoding">AddAltByEncoding</a> <a name="addaltbyencoding">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Alternate text to display for a file instead of an icon
selected by MIME-encoding</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>AddAltByEncoding <em>string MIME-encoding</em>
[<em>MIME-encoding</em>] ...</td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host, directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>Indexes</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_autoindex</td></tr></table></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>.
<em>MIME-encoding</em> is a valid content-encoding, such as
<code>x-compress</code>. <em>String</em> is enclosed in double
quotes (<code>"</code>). This alternate text is displayed if the
client is image-incapable, has image loading disabled, or fails to
retrieve the icon.</p>
<p>Example:</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
AddAltByEncoding "gzip" x-gzip
</code></td></tr></table></blockquote>
<hr/><h2><a name="AddAltByType">AddAltByType</a> <a name="addaltbytype">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Alternate text to display for a file, instead of an
icon selected by MIME content-type</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>AddAltByType <em>string
MIME-type</em> [<em>MIME-type</em>] ...</td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host, directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>Indexes</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_autoindex</td></tr></table></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>.
<em>MIME-type</em> is a valid content-type, such as
<code>text/html</code>. <em>String</em> is enclosed in double
quotes (<code>"</code>). This alternate text is displayed if the
client is image-incapable, has image loading disabled, or fails to
retrieve the icon.</p>
<p>Example:</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
AddAltByType "TXT" text/plain
</code></td></tr></table></blockquote>
<hr/><h2><a name="AddDescription">AddDescription</a> <a name="adddescription">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td/></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>AddDescription
<em>string file</em> [<em>file</em>] ...</td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host, directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>Indexes</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_autoindex</td></tr></table></td></tr></table>
<p>This sets the description to display for a file, for
<code><a href="#indexoptions:fancyindexing">FancyIndexing</a></code>.
<em>File</em> is a file extension, partial filename, wild-card
expression or full filename for files to describe.
<em>String</em> is enclosed in double quotes (<code>"</code>).
Example:</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>AddDescription "The planet Mars"
/web/pics/mars.gif</code></td></tr></table></blockquote>
<p>The typical, default description field is 23 bytes wide. 6
more bytes are added by the
<code>IndexOptions SuppressIcon</code> option, 7 bytes are
added by the <code>IndexOptions SuppressSize</code>
option, and 19 bytes are added by the
<code>IndexOptions SuppressLastModified</code> option.
Therefore, the widest default the description column is ever
assigned is 55 bytes.</p>
<p>See the <a href="#indexoptions:descriptionwidth">DescriptionWidth</a>
<a href="#indexoptions" class="directive"><code class="directive">IndexOptions</code></a> keyword
for details on overriding the size of this column, or allowing
descriptions of unlimited length.</p>
<blockquote><table><tr><td bgcolor="#e0e5f5"><p align="center"><strong>Caution</strong></p> <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>
</td></tr></table></blockquote>
<hr/><h2><a name="AddIcon">AddIcon</a> <a name="addicon">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Icon to display for a file selected by name</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>AddIcon <em>icon
name</em> [<em>name</em>] ...</td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host, directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>Indexes</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_autoindex</td></tr></table></td></tr></table>
<p>This sets the icon to display next to a file ending in
<em>name</em> for <code><a href="#indexoptions:fancyindexing">FancyIndexing</a></code>.
<em>Icon</em> is either a (%-escaped) relative URL to the icon,
or of the format (<em>alttext</em>,<em>url</em>) where
<em>alttext</em> is the text tag given for an icon for
non-graphical browsers.</p>
<p><em>Name</em> is either ^^DIRECTORY^^ for directories,
^^BLANKICON^^ for blank lines (to format the list correctly), a
file extension, a wildcard expression, a partial filename or a
complete filename. Examples:</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
AddIcon (IMG,/icons/image.xbm) .gif .jpg .xbm<br>
AddIcon /icons/dir.xbm ^^DIRECTORY^^<br>
AddIcon /icons/backup.xbm *~
</code></td></tr></table></blockquote>
<p><a href="#addiconbytype" class="directive"><code class="directive">AddIconByType</code></a>
should be used in preference to <code class="directive">AddIcon</code>,
when possible.</p>
<hr/><h2><a name="AddIconByEncoding">AddIconByEncoding</a> <a name="addiconbyencoding">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Icon to display next to files selected by MIME
content-encoding</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>AddIconByEncoding
<em>icon MIME-encoding</em> [<em>MIME-encoding</em>] ...</td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host, directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>Indexes</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_autoindex</td></tr></table></td></tr></table>
<p>This sets the icon to display next to files with <code><a href="#indexoptions:fancyindexing">FancyIndexing</a></code>.
<em>Icon</em> is either a (%-escaped) relative URL to the icon,
or of the format (<em>alttext</em>,<em>url</em>) where
<em>alttext</em> is the text tag given for an icon for
non-graphical browsers.</p>
<p><em>Mime-encoding</em> is a wildcard expression matching
required the content-encoding. Examples:</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>AddIconByEncoding /icons/compress.xbm x-compress</code></td></tr></table></blockquote>
<hr/><h2><a name="AddIconByType">AddIconByType</a> <a name="addiconbytype">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Icon to display next to files selected by MIME
content-type</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>AddIconByType
<em>icon MIME-type</em> [<em>MIME-type</em>] ...</td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host, directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>Indexes</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_autoindex</td></tr></table></td></tr></table>
<p>This sets the icon to display next to files of type
<em>MIME-type</em> for <code><a href="#indexoptions:fancyindexing">FancyIndexing</a></code>.
<em>Icon</em> is either a (%-escaped) relative URL to the icon,
or of the format (<em>alttext</em>,<em>url</em>) where
<em>alttext</em> is the text tag given for an icon for
non-graphical browsers.</p>
<p><em>Mime-type</em> is a wildcard expression matching
required the mime types. Examples:</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>AddIconByType (IMG,/icons/image.xbm) image/*</code></td></tr></table></blockquote>
<hr/><h2><a name="DefaultIcon">DefaultIcon</a> <a name="defaulticon">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Icon to display for files when no specific icon is
configured</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>DefaultIcon <em>url-path</em></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host, directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>Indexes</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_autoindex</td></tr></table></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>.
<em>Url</em> is a (%-escaped) relative URL to the icon.
Examples:</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>DefaultIcon /icon/unknown.xbm</code></td></tr></table></blockquote>
<hr/><h2><a name="HeaderName">HeaderName</a> <a name="headername">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Name of the file that will be inserted at the top
of the index listing</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>HeaderName <em>filename</em></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host, directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>Indexes</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_autoindex</td></tr></table></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. <em>Filename</em> is the name of the file to include.</p>
<blockquote><table><tr><td bgcolor="#e0e5f5">
<p>Both HeaderName and <a href="#readmename" class="directive"><code class="directive">ReadmeName</code></a> now treat
<em>Filename</em> as a URI path relative to the one used to
access the directory being indexed. <em>Filename</em> 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>, <em>etc.</em>). This means that
<em>filename</em> 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>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
AddType text/html .cgi
</code></td></tr></table></blockquote>
<p><a href="../content-negotiation.html">Content negotiation</a>
will be performed if the <code>MultiViews</code> <a href="core.html#option" class="directive"><code class="directive">Option</code></a> is enabled. If
<em>filename</em> resolves to a static <code>text/html</code>
document (not a CGI script) and the <code>Includes</code>
<a href="core.html#option" class="directive"><code class="directive">option</code></a> is enabled, the file
will be processed for server-side includes (see the
<code><a href="mod_include.html">mod_include</a></code> documentation).</p>
</td></tr></table></blockquote>
<p>If the file specified by <code class="directive">HeaderName</code> contains
the beginnings of an HTML document (<HTML>, <HEAD>,
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>
<hr/><h2><a name="IndexIgnore">IndexIgnore</a> <a name="indexignore">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Adds to the list of files to hide when listing
a directory</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>IndexIgnore <em>file</em> [<em>file</em>] ...</td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host, directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>Indexes</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_autoindex</td></tr></table></td></tr></table>
<p>The <code class="directive">IndexIgnore</code> directive adds to the
list of files to hide when listing a directory. <em>File</em> is a
file extension, partial filename, wildcard expression or full
filename for files to ignore. Multiple IndexIgnore directives add
to the list, rather than the replacing the list of ignored
files. By default, the list contains
`<code>.</code>'. Example:</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>IndexIgnore README .htaccess *~</code></td></tr></table></blockquote>
<hr/><h2><a name="IndexOptions">IndexOptions</a> <a name="indexoptions">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Various configuration settings for directory
indexing</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>IndexOptions [+|-]<em>option</em> [[+|-]<em>option</em>] ...</td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host, directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>Indexes</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_autoindex</td></tr></table></td></tr></table>
<p>The <code class="directive">IndexOptions</code> directive specifies the
behavior of the directory indexing. <em>Option</em> can be one
of</p>
<dl>
<dt><a name="indexoptions:descriptionwidth">DescriptionWidth=[<em>n</em>
| *] (<em>Apache 1.3.10 or 2.0.23 and later</em>)</a></dt>
<dd>The <code>DescriptionWidth</code> keyword allows you to
specify the width of the description column in
characters.</dd>
<dd><code>-DescriptionWidth</code> (or unset) allows
mod_autoindex to calculate the best width.</dd>
<dd><code>DescriptionWidth=n</code> fixes the column width to
n bytes wide.</dd>
<dd><code>DescriptionWidth=*</code> grows the column to the
width necessary to accommodate the longest description
string.</dd>
<dd><strong>See the section on <a href="#adddescription" class="directive"><code class="directive">AddDescription</code></a> for dangers
inherent in truncating descriptions.</strong></dd>
<dt><a name="indexoptions:fancyindexing">FancyIndexing</a></dt>
<dd>
This turns on fancy indexing of directories.</dd>
<dt><a name="indexoptions:foldersfirst">FoldersFirst (<em>Apache
1.3.10 or 2.0.23 and later</em>)</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">HTMLTable</a> <em>(Experimental,
Apache 2.0.23 and later)</em></dt>
<dd>
This experimental option with FancyIndexing constructs a
simple table for the fancy directory listing. Note this will
confuse older browsers. It is particularly necessary if file
names or description text will alternate between
left-to-right and right-to-left reading order, as can happen
on WinNT or other utf-8 enabled platforms.</dd>
<dt><a name="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">IconHeight[=pixels]
(<em>Apache 1.3 and later</em>)</a></dt>
<dd>
Presence of this option, when used with IconWidth, 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
software.</dd>
<dt><a name="indexoptions:iconwidth">IconWidth[=pixels] (<em>Apache
1.3 and later</em>)</a></dt>
<dd>
Presence of this option, when used with IconHeight, 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
software.</dd>
<dt><a name="indexoptions:ignoreclient">IgnoreClient</a></dt>
<dd>
This option causes mod_autoindex 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">NameWidth=[<em>n</em> | *]
(<em>Apache 1.3.2 and later</em>)</a></dt>
<dd>The NameWidth keyword allows you to specify the width of
the filename column in bytes.</dd>
<dd><code>-NameWidth</code> (or unset) allows mod_autoindex
to calculate the best width.</dd>
<dd><code>NameWidth=n</code> fixes the column width to n
bytes wide.</dd>
<dd><code>NameWidth=*</code> grows the column to the
necessary width.</dd>
<dt><a name="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 <a href="#adddescription">AddDescription</a> then
httpd will read the document for the value of the TITLE tag.
This is CPU and disk intensive.</dd>
<dt><a name="indexoptions:suppresscolumnsorting">SuppressColumnSorting</a>
(<em>Apache 1.3 and later</em>)</dt>
<dd>
If specified, Apache 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. <strong>Prior to Apache 2.0.23, this also
disabled parsing the Query Arguments for the sort
string.</strong> That behavior is now controlled by <a href="#indexoptions:ignoreclient">IndexOptions
IgnoreClient</a> in Apache 2.0.23.</dd>
<dt><a name="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 <a href="#adddescription"><code>AddDescription</code></a> for
information about setting the file description. See also the
<a href="#indexoptions:descriptionwidth"><code>DescriptionWidth</code></a>
index option to limit the size of the description
column.</dd>
<dt><a name="indexoptions:suppresshtmlpreamble">SuppressHTMLPreamble</a>
(<em>Apache 1.3 and later</em>)</dt>
<dd>
If the directory actually contains a file specified by the
<a href="#headername" class="directive"><code class="directive">HeaderName</code></a>
directive, the module usually includes the contents of the file
after a standard HTML preamble (<HTML>, <HEAD>,
<em>et cetera</em>). The SuppressHTMLPreamble 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.</dd>
<dt><a name="indexoptions:suppressicon">SuppressIcon</a> (<em>Apache
2.0.23 and later</em>)</dt>
<dd>
This will suppress the icon in fancy indexing listings.
Combining both <em>SuppressIcon</em> and
<em>SuppressRules</em> yields proper HTML 3.2 output, which
by the final specification prohibits IMG and HR tags from the
PRE block (used to format FancyIndexed listings.)</dd>
<dt><a name="indexoptions:suppresslastmodified">SuppressLastModified</a></dt>
<dd>
This will suppress the display of the last modification date,
in fancy indexing listings.</dd>
<dt><a name="indexoptions:suppressrules">SuppressRules</a>
(<em>Apache 2.0.23 and later</em>)</dt>
<dd>
This will suppress the horizontal rule lines (HR tags) in
directory listings. Combining both <em>SuppressIcon</em> and
<em>SuppressRules</em> yeilds proper HTML 3.2 output, which
by the final specification prohibits IMG and HR tags from the
PRE block (used to format FancyIndexed listings.)</dd>
<dt><a name="indexoptions:suppresssize">SuppressSize</a></dt>
<dd>
This will suppress the file size in fancy indexing
listings.</dd>
<dt><a name="indexoptions:trackmodified">TrackModified (<em>Apache
1.3.15 or 2.0.23 and later</em>)</a></dt>
<dd>
This returns the Last-Modified and ETag 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 HEAD
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
Last-Modified header on all Unix platforms.</strong> If this
is a concern, leave this option disabled.</dd>
<dt><a name="indexoptions:versionsort">VersionSort (<em>Apache 2.0a3
and later</em>)</a></dt>
<dd>
The VersionSort 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.
For example:
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><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<br>
</code></td></tr></table></blockquote>
If the number starts with a zero, then it is considered to
be a fraction:
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
foo-1.001<br>
foo-1.002<br>
foo-1.030<br>
foo-1.04
</code></td></tr></table></blockquote>
</dd>
<dd>
<strong>Incremental IndexOptions</strong>
</dd>
<dd>
Apache 1.3.3 introduced some significant changes in the
handling of <code class="directive">IndexOptions</code> directives. In
particular,<br>
<br>
<ul>
<li>Multiple <code class="directive">IndexOptions</code> directives for a
single directory are now merged together. The result of
the example above will now be the equivalent of
<code>IndexOptions FancyIndexing ScanHTMLTitles</code>.</li>
<li>The addition of the incremental syntax
(<em>i.e.</em>, prefixing keywords with '+' or '-').</li>
</ul>
<br>
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:
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>IndexOptions +ScanHTMLTitles -IconsAreLinks
FancyIndexing<br>
IndexOptions +SuppressSize<br>
</code></td></tr></table></blockquote>
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.<br>
<br>
To unconditionally set the <code class="directive">IndexOptions</code> for a
particular directory, clearing the inherited settings,
specify keywords without any '+' or '-' prefixes.
</dd>
</dl>
<hr/><h2><a name="IndexOrderDefault">IndexOrderDefault</a> <a name="indexorderdefault">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Sets the default ordering of the directory index</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>IndexOrderDefault
Ascending|Descending Name|Date|Size|Description</td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host, directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>Indexes</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_autoindex</td></tr></table></td></tr></table>
<p>The <code class="directive">IndexOrderDefault</code> directive is used
in combination with the <a href="#indexoptions:fancyindexing"><code>FancyIndexing</code></a>
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 force a directory listing to only be displayed in a
particular order by combining this directive with the <a href="#indexoptions:suppresscolumnsorting"><code>SuppressColumnSorting</code></a>
index option; this will prevent the client from requesting the
directory listing in a different order.</p>
<hr/><h2><a name="ReadmeName">ReadmeName</a> <a name="readmename">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td/></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>ReadmeName <em>filename</em></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host, directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>Indexes</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_autoindex</td></tr></table></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. <em>Filename</em> is the name of the file to include, and
is taken to be relative to the location being indexed.</p>
<p>See also <a href="#headername" class="directive"><code class="directive">HeaderName</code></a>, where this behavior
is described in greater detail.</p>
<hr/></blockquote><h3 align="center">Apache HTTP Server Version 2.0</h3><a href="./"><img src="../images/index.gif" alt="Index"/></a><a href="../"><img src="../images/home.gif" alt="Home"/></a></body></html>
1.1 httpd-2.0/docs/manual/mod/mod_cache.html.en
Index: mod_cache.html.en
===================================================================
<html xmlns="http://www.w3.org/TR/xhtml1/strict"><head><!--
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
This file is generated from xml source: DO NOT EDIT
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
--><title>mod_cache- Apache HTTP Server</title><link href="../style/manual.css" type="text/css" rel="stylesheet"/></head><body><blockquote><div align="center"><img src="../images/sub.gif" alt="[APACHE DOCUMENTATION]"/><h3>Apache HTTP Server Version 2.0</h3></div><h1 align="center">Apache Module mod_cache</h1><table cellspacing="1" cellpadding="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td valign="top"><span class="help">Description:</span></td><td>Content cache keyed to URIs</td></tr><tr><td><a href="module-dict.html#Status" class="help">Status:</a></td><td>Experimental</td></tr><tr><td><a href="module-dict.html#ModuleIdentifier" class="help">Module Identifier:</a></td><td>cache_module</td></tr></table></td></tr></table><h2>Summary</h2>
<blockquote><table><tr><td bgcolor="#ffe5f5">
This module is experimental. Documentation is still under development...
</td></tr></table></blockquote>
<p>mod_cache implements an RFC 2616 compliant HTTP content
cache that can be used to cache either local or proxied content.
mod_cache requires the services of one or more storage
management modules. Two storage management modules are included in
the base Apache distribution:</p>
<dl>
<dt><em>mod_disk_cache</em></dt>
<dd>implements a disk based storage manager for use with mod_proxy</dd>
<dt><em>mod_mem_cache</em></dt>
<dd>implements an in-memory based storage manager. mod_mem_cache
can be configured to operate in two modes: caching open file
descriptors or caching objects in heap storage. <em>mod_mem_cache</em>
is most useful when used to cache locally generated content or to cache
backend server content for mod_proxy configured for ProxyPass (aka <em>reverse proxy</em>)</dd>
</dl>
<p>Content stored and retrived keyed to the URL. Content with
access protections is not cached.</p>
<h2>Directives</h2><ul><li><a href="#cachedefaultexpire">CacheDefaultExpire</a></li><li><a href="#cachedisable">CacheDisable</a></li><li><a href="#cacheenable">CacheEnable</a></li><li><a href="#cacheignorecachecontrol">CacheIgnoreCacheControl</a></li><li><a href="#cacheignorenolastmod">CacheIgnoreNoLastMod</a></li><li><a href="#cachelastmodifiedfactor">CacheLastModifiedFactor</a></li><li><a href="#cachemaxexpire">CacheMaxExpire</a></li><li><a href="#cacheon">CacheOn</a></li></ul><h2>Sample Configuration</h2>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><p align="center"><strong>Sample httpd.conf</strong></p><code>
# <br>
# Sample Cache Configuration <br>
# <br>
LoadModule cache_module modules/mod_cache.so <br>
<IfModule mod_cache.c><br>
CacheOn On<br>
<p></p>
#LoadModule disk_cache_module modules/mod_disk_cache.so <br>
<IfModule mod_disk_cache.c> <br>
CacheRoot c:/cacheroot <br>
CacheSize
CacheEnable disk / <br>
CacheDirLevels 5 <br>
CacheDirLength 3 <br>
</IfModule> <br>
<p></p>
LoadModule mem_cache_module modules/mod_mem_cache.so <br>
<IfModule mod_mem_cache.c> <br>
MCacheEnable mem / <br>
MCacheSize 4096 <br>
MCacheMaxObjectCount 100 <br>
MCacheMinObjectSize 1 <br>
MCacheMaxObjectSize 2048 <br>
</IfModule> <br>
<p></p>
</IfModule> <br>
</code></td></tr></table></blockquote>
<hr/><h2><a name="CacheDefaultExpire">CacheDefaultExpire</a> <a name="cachedefaultexpire">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td/></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td/></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Experimental</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_cache</td></tr></table></td></tr></table>
<p>The default time in seconds to cache a document.</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
CacheDefaultExpire 86400
</code></td></tr></table></blockquote>
<hr/><h2><a name="CacheDisable">CacheDisable</a> <a name="cachedisable">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Disable caching of specified URLs by specified storage manager</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>CacheDisable <em>cache_type </em> <em> url-string</em></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Experimental</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_cache</td></tr></table></td></tr></table>
<p>The <code class="directive">CacheDisable</code> directive instructs
mod_cache to <em>not</em> cache urls at or above <em>url-string</em>.</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><p align="center"><strong>Example</strong></p><code>
CacheDisable disk /local_files
</code></td></tr></table></blockquote>
<hr/><h2><a name="CacheEnable">CacheEnable</a> <a name="cacheenable">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Enable caching specified URLs in a specified storage manager</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>CacheEnable <em>cache_type </em><em> url-string</em></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Experimental</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_cache</td></tr></table></td></tr></table>
<p>The <code class="directive">CacheEnable</code> directive instructs
mod_cache to cache urls at or below <em>url-string</em>.
The cache store is specified with the <em>cache_type</em> argument.
<em>cache_type </em> <em> mem</em> instructs mod_cache to use the
in-memory cache storage manager implemented by <em>mod_mem_cache</em>.
<em>cache_type </em> <em> disk</em> instructs mod_cache to use the
cache storage manager implemented by <em>mod_disk_cache </em>. </p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
CacheEnable disk / <br>
CacheEnable mem /manual <br>
CacheEnable fd /images <br>
</code></td></tr></table></blockquote>
<hr/><h2><a name="CacheIgnoreCacheControl">CacheIgnoreCacheControl</a> <a name="cacheignorecachecontrol">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Ignore requests from the client for uncached content</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td/></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Experimental</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_cache</td></tr></table></td></tr></table>
<p>Ignore requests from the client for uncached content</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
CacheIgnoreNoLastMod
</code></td></tr></table></blockquote>
<hr/><h2><a name="CacheIgnoreNoLastMod">CacheIgnoreNoLastMod</a> <a name="cacheignorenolastmod">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Ignore responses where there is no Last Modified Header</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td/></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Experimental</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_cache</td></tr></table></td></tr></table>
<p>Ignore responses where there is no Last Modified Header</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
CacheIgnoreNoLastMod
</code></td></tr></table></blockquote>
<hr/><h2><a name="CacheLastModifiedFactor">CacheLastModifiedFactor</a> <a name="cachelastmodifiedfactor">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>The factor used to estimate the Expires date from the LastModified date</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td/></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Experimental</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_cache</td></tr></table></td></tr></table>
<p>The factor used to estimate the Expires date from the LastModified date.</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
CacheLastModifiedFactor
</code></td></tr></table></blockquote>
<hr/><h2><a name="CacheMaxExpire">CacheMaxExpire</a> <a name="cachemaxexpire">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>The maximum time in seconds to cache a document</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td/></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Experimental</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_cache</td></tr></table></td></tr></table>
<p>The maximum time in seconds to cache a document.</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
CacheMaxExpire 604800
</code></td></tr></table></blockquote>
<hr/><h2><a name="CacheOn">CacheOn</a> <a name="cacheon">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td/></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>CacheOn</td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Experimental</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_cache</td></tr></table></td></tr></table>
<p>
</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
CacheOn
</code></td></tr></table></blockquote>
<hr/></blockquote><h3 align="center">Apache HTTP Server Version 2.0</h3><a href="./"><img src="../images/index.gif" alt="Index"/></a><a href="../"><img src="../images/home.gif" alt="Home"/></a></body></html>
1.1 httpd-2.0/docs/manual/mod/mod_cern_meta.html.en
Index: mod_cern_meta.html.en
===================================================================
<html xmlns="http://www.w3.org/TR/xhtml1/strict"><head><!--
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
This file is generated from xml source: DO NOT EDIT
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
--><title>mod_cern_meta- Apache HTTP Server</title><link href="../style/manual.css" type="text/css" rel="stylesheet"/></head><body><blockquote><div align="center"><img src="../images/sub.gif" alt="[APACHE DOCUMENTATION]"/><h3>Apache HTTP Server Version 2.0</h3></div><h1 align="center">Apache Module mod_cern_meta</h1><table cellspacing="1" cellpadding="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td valign="top"><span class="help">Description:</span></td><td>CERN httpd metafile semantics</td></tr><tr><td><a href="module-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="module-dict.html#ModuleIdentifier" class="help">Module Identifier:</a></td><td>cern_meta_module</td></tr></table></td></tr></table><h2>Summary</h2>
<p>Emulate the CERN HTTPD Meta file semantics. Meta files are HTTP
headers that can be output in addition to the normal range of
headers for each file accessed. They appear rather like the
Apache .asis files, and are able to provide a crude way of
influencing the Expires: header, as well as providing other
curiosities. There are many ways to manage meta information,
this one was chosen because there is already a large number of
CERN users who can exploit this module.</p>
<p>More information on the <a href="http://www.w3.org/pub/WWW/Daemon/User/Config/General.html#MetaDir">
CERN metafile semantics</a> is available.</p>
<h2>Directives</h2><ul><li><a href="#metadir">MetaDir</a></li><li><a href="#metafiles">MetaFiles</a></li><li><a href="#metasuffix">MetaSuffix</a></li></ul><hr/><h2><a name="MetaDir">MetaDir</a> <a name="metadir">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Name of the directory to find CERN-style meta information
files</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>MetaDir <em>directory</em></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>MetaDir .web</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>directory</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_cern_meta</td></tr></table></td></tr></table>
<p>Specifies the name of the directory in which Apache can find
meta information files. The directory is usually a 'hidden'
subdirectory of the directory that contains the file being
accessed. Set to "<code>.</code>" to look in the same directory
as the file.</p>
<hr/><h2><a name="MetaFiles">MetaFiles</a> <a name="metafiles">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Activates CERN meta-file processing</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>MetaFiles on|off</td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>MetaFiles off</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>directory</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_cern_meta</td></tr></table></td></tr></table>
<p>Turns on/off Meta file processing on a per-directory basis.</p>
<hr/><h2><a name="MetaSuffix">MetaSuffix</a> <a name="metasuffix">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>File name suffix for the file containg CERN-style
meta information</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>MetaSuffix <em>suffix</em></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>MetaSuffix .meta</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>directory</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_cern_meta</td></tr></table></td></tr></table>
<p>Specifies the file name suffix for the file containing the
meta information. For example, the default values for the two
directives will cause a request to
<code>DOCUMENT_ROOT/somedir/index.html</code> to look in
<code>DOCUMENT_ROOT/somedir/.web/index.html.meta</code> and
will use its contents to generate additional MIME header
information.</p>
<hr/></blockquote><h3 align="center">Apache HTTP Server Version 2.0</h3><a href="./"><img src="../images/index.gif" alt="Index"/></a><a href="../"><img src="../images/home.gif" alt="Home"/></a></body></html>
1.1 httpd-2.0/docs/manual/mod/mod_cgi.html.en
Index: mod_cgi.html.en
===================================================================
<html xmlns="http://www.w3.org/TR/xhtml1/strict"><head><!--
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
This file is generated from xml source: DO NOT EDIT
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
--><title>mod_cgi- Apache HTTP Server</title><link href="../style/manual.css" type="text/css" rel="stylesheet"/></head><body><blockquote><div align="center"><img src="../images/sub.gif" alt="[APACHE DOCUMENTATION]"/><h3>Apache HTTP Server Version 2.0</h3></div><h1 align="center">Apache Module mod_cgi</h1><table cellspacing="1" cellpadding="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td valign="top"><span class="help">Description:</span></td><td>Execution of CGI scripts</td></tr><tr><td><a href="module-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="module-dict.html#ModuleIdentifier" class="help">Module Identifier:</a></td><td>cgi_module</td></tr></table></td></tr></table><h2>Summary</h2>
<p>Any file that has the mime type
<code>application/x-httpd-cgi</code> or handler
<code>cgi-script</code> (Apache 1.1 or later) will be treated
as a CGI script, and run by the server, with its output being
returned to the client. Files acquire this type either by
having a name containing an extension defined by the
<a href="mod_mime.html#addtype" class="directive"><code class="directive">AddType</code></a> directive, or by being
in a <a href="mod_alias.html#scriptalias" class="directive"><code class="directive">ScriptAlias</code></a>
directory.</p>
<p>When the server invokes a CGI script, it will add a variable
called <code>DOCUMENT_ROOT</code> to the environment. This
variable will contain the value of the
<a href="core.html#documentroot" class="directive"><code class="directive">DocumentRoot</code></a> configuration
variable.</p>
<p>For an introduction to using CGI scripts with Apache, see
our tutorial on <a href="../howto/cgi.html">Dynamic Content
With CGI</a>.</p>
<p>When using a multi-threaded MPM under unix, the module
<code><a href="mod_cgid.html">mod_cgid</a></code> should be used in place of
this module. At the user level, the two modules are essentially
identical.</p>
<h2>Directives</h2><ul><li><a href="#scriptlog">ScriptLog</a></li><li><a href="#scriptlogbuffer">ScriptLogBuffer</a></li><li><a href="#scriptloglength">ScriptLogLength</a></li></ul><p><strong>See also </strong></p><ul><li><a href="core.html#options" class="directive"><code class="directive">Options</code></a></li><li><a href="mod_alias.html#scriptalias" class="directive"><code class="directive">ScriptAlias</code></a></li><li><a href="mod_mime.html#addhandler" class="directive"><code class="directive">AddHandler</code></a></li></ul><h2>CGI Environment variables</h2>
<p>The server will set the CGI environment variables as described
in the <a href="http://hoohoo.ncsa.uiuc.edu/cgi/">CGI
specification</a>, with the following provisions:</p>
<dl>
<dt>PATH_INFO</dt>
<dd>This will not be available if the <a href="core.html#acceptpathinfo" class="directive"><code class="directive">AcceptPathInfo</code></a> directive is explicitly set to
<code>off</code>. The default behavior, if AcceptPathInfo is
not given, is that mod_cgi will accept path info (trailing
/more/path/info following the script filename in the URI), while
the core server will return a 404 NOT FOUND error for requests
with additional path info. Omitting the AcceptPathInfo
directive has the same effect as setting it <code>on</code> for
mod_cgi requests.</dd>
<dt>REMOTE_HOST</dt>
<dd>This will only be set if <a href="core.html#hostnamelookups" class="directive"><code class="directive">HostnameLookups</code></a> is set to <code>on</code> (it
is off by default), and if a reverse DNS lookup of the accessing
host's address indeed finds a host name.</dd>
<dt>REMOTE_IDENT</dt>
<dd>This will only be set if <a href="core.html#identitycheck" class="directive"><code class="directive">IdentityCheck</code></a> is set to
<code>on</code> and the accessing host supports the ident
protocol. Note that the contents of this variable cannot be
relied upon because it can easily be faked, and if there is a
proxy between the client and the server, it is usually
totally useless.</dd>
<dt>REMOTE_USER</dt>
<dd>This will only be set if the CGI script is subject to
authentication.</dd>
</dl>
<h2><a name="cgi_debug">CGI Debugging</a></h2>
<p>Debugging CGI scripts has traditionally been difficult, mainly
because it has not been possible to study the output (standard
output and error) for scripts which are failing to run
properly. These directives, included in Apache 1.2 and later,
provide more detailed logging of errors when they occur. </p>
<h3>CGI Logfile Format</h3>
<p>When configured, the CGI error log logs any CGI which does not
execute properly. Each CGI script which fails to operate causes
several lines of information to be logged. The first two lines
are always of the format:</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
%% [<em>time</em>] <em>request-line</em><br>
%% <em>HTTP-status</em> <em>CGI-script-filename</em>
</code></td></tr></table></blockquote>
<p>If the error is that CGI script cannot be run, the log file
will contain an extra two lines:</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
%%error<br>
<em>error-message</em>
</code></td></tr></table></blockquote>
<p>Alternatively, if the error is the result of the script
returning incorrect header information (often due to a bug in
the script), the following information is logged: </p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
%request<br>
<em>All HTTP request headers received</em><br>
<em>POST or PUT entity (if any)</em><br>
%response<br>
<em>All headers output by the CGI script</em><br>
%stdout<br>
<em>CGI standard output</em><br>
%stderr<br>
<em>CGI standard error</em><br>
</code></td></tr></table></blockquote>
<p>(The %stdout and %stderr parts may be missing if the script did
not output anything on standard output or standard error). </p>
<hr/><h2><a name="ScriptLog">ScriptLog</a> <a name="scriptlog">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Location of the CGI script error logfile</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>ScriptLog <em>file-path</em></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td><code><a href="mod_cgi.html">mod_cgi</a></code>, <code><a href="mod_cgid.html">mod_cgid</a></code></td></tr></table></td></tr></table>
<p>The <code class="directive">ScriptLog</code> directive sets the CGI
script error logfile. If no ScriptLog is given, no error log is
created. If given, any CGI errors are logged into the filename
given as argument. If this is a relative file or path it is taken
relative to the server root.</p>
<p>This log will be opened as the user the child processes run
as, ie. the user specified in the main <a href="mpm_common.html#user" class="directive"><code class="directive">User</code></a> directive. This means that
either the directory the script log is in needs to be writable
by that user or the file needs to be manually created and set
to be writable by that user. If you place the script log in
your main logs directory, do <strong>NOT</strong> change the
directory permissions to make it writable by the user the child
processes run as.</p>
<p>Note that script logging is meant to be a debugging feature
when writing CGI scripts, and is not meant to be activated
continuously on running servers. It is not optimized for speed
or efficiency, and may have security problems if used in a
manner other than that for which it was designed.</p>
<hr/><h2><a name="ScriptLogBuffer">ScriptLogBuffer</a> <a name="scriptlogbuffer">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Maximum amount of PUT or POST requests that will be recorded
in the scriptlog</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>ScriptLogBuffer <em>bytes</em></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>ScriptLogBuffer 1024</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td><code><a href="mod_cgi.html">mod_cgi</a></code>, <code><a href="mod_cgid.html">mod_cgid</a></code></td></tr></table></td></tr></table>
<p>The size of any PUT or POST entity body that is logged to
the file is limited, to prevent the log file growing too big
too quickly if large bodies are being received. By default, up
to 1024 bytes are logged, but this can be changed with this
directive.</p>
<hr/><h2><a name="ScriptLogLength">ScriptLogLength</a> <a name="scriptloglength">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Size limit of the CGI script logfile</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>ScriptLogLength <em>bytes</em></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>ScriptLogLength 10385760</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td><code><a href="mod_cgi.html">mod_cgi</a></code>, <code><a href="mod_cgid.html">mod_cgid</a></code></td></tr></table></td></tr></table>
<p><code class="directive">ScriptLogLength</code> can be used to limit the
size of the CGI script logfile. Since the logfile logs a lot of
information per CGI error (all request headers, all script output)
it can grow to be a big file. To prevent problems due to unbounded
growth, this directive can be used to set an maximum file-size for
the CGI logfile. If the file exceeds this size, no more
information will be written to it.</p>
<hr/></blockquote><h3 align="center">Apache HTTP Server Version 2.0</h3><a href="./"><img src="../images/index.gif" alt="Index"/></a><a href="../"><img src="../images/home.gif" alt="Home"/></a></body></html>
1.1 httpd-2.0/docs/manual/mod/mod_cgid.html.en
Index: mod_cgid.html.en
===================================================================
<html xmlns="http://www.w3.org/TR/xhtml1/strict"><head><!--
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
This file is generated from xml source: DO NOT EDIT
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
--><title>mod_cgid- Apache HTTP Server</title><link href="../style/manual.css" type="text/css" rel="stylesheet"/></head><body><blockquote><div align="center"><img src="../images/sub.gif" alt="[APACHE DOCUMENTATION]"/><h3>Apache HTTP Server Version 2.0</h3></div><h1 align="center">Apache Module mod_cgid</h1><table cellspacing="1" cellpadding="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td valign="top"><span class="help">Description:</span></td><td>Execution of CGI scripts using an
external CGI daemon</td></tr><tr><td><a href="module-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="module-dict.html#ModuleIdentifier" class="help">Module Identifier:</a></td><td>cgid_module</td></tr><tr><td align="left" valign="top"><a href="module-dict.html#Compatibility" class="help">Compatibility:</a></td><td><compatibility>Unix threaded MPMs only</compatibility></td></tr></table></td></tr></table><h2>Summary</h2>
<p>Except for the optimizations and the additional <a href="#scriptsock" class="directive"><code class="directive">ScriptSock</code></a> directive noted below,
mod_cgid behaves similarly to mod_cgi. <strong>See the
<code><a href="mod_cgi.html">mod_cgi</a></code> Summary for additional details about
Apache and CGI.</strong></p>
<p>On certain unix operating systems, forking a process from a
multi-threaded server is a very expensive operation because the
new process will replicate all the threads of the parent
process. In order to avoid incurring this expense on each CGI
invocation, mod_cgid creates an external daemon that is
responsible for forking child processes to run CGI scripts. The
main server communicates with this daemon using a unix domain
socket.</p>
<p>This module is used by default whenever a multi-threaded MPM
is selected during the compilation process. At the user level,
this module is identical in configuration and operation to
<code><a href="mod_cgi.html">mod_cgi</a></code>. The only exception is the
additional directive <code>ScriptSock</code> which gives the
name of the socket to use for communication with the cgi
daemon.</p>
<h2>Directives</h2><ul><li><a href="mod_cgi.html#scriptlog">ScriptLog</a></li><li><a href="mod_cgi.html#scriptlogbuffer">ScriptLogBuffer</a></li><li><a href="mod_cgi.html#scriptloglength">ScriptLogLength</a></li><li><a href="#scriptsock">ScriptSock</a></li></ul><hr/><h2><a name="ScriptSock">ScriptSock</a> <a name="scriptsock">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td/></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>ScriptSock <em>file-path</em></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>ScriptSock logs/cgisock</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_cgid</td></tr></table></td></tr></table>
<p>This directive sets the name of the socket to use for
communication with the CGI daemon. The socket will be opened
using the permissions of the user who starts Apache (usually
root). To maintain the security of communications with CGI
scripts, it is important that no other user has permission to
write in the directory where the socket is located.</p>
<hr/></blockquote><h3 align="center">Apache HTTP Server Version 2.0</h3><a href="./"><img src="../images/index.gif" alt="Index"/></a><a href="../"><img src="../images/home.gif" alt="Home"/></a></body></html>
1.1 httpd-2.0/docs/manual/mod/mod_charset_lite.html.en
Index: mod_charset_lite.html.en
===================================================================
<html xmlns="http://www.w3.org/TR/xhtml1/strict"><head><!--
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
This file is generated from xml source: DO NOT EDIT
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
--><title>mod_charset_lite- Apache HTTP Server</title><link href="../style/manual.css" type="text/css" rel="stylesheet"/></head><body><blockquote><div align="center"><img src="../images/sub.gif" alt="[APACHE DOCUMENTATION]"/><h3>Apache HTTP Server Version 2.0</h3></div><h1 align="center">Apache Module mod_charset_lite</h1><table cellspacing="1" cellpadding="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td valign="top"><span class="help">Description:</span></td><td>Specify character set translation or recoding</td></tr><tr><td><a href="module-dict.html#Status" class="help">Status:</a></td><td>Experimental</td></tr><tr><td><a href="module-dict.html#ModuleIdentifier" class="help">Module Identifier:</a></td><td>charset_lite_module</td></tr></table></td></tr></table><h2>Summary</h2>
<p>This is an <strong>experimental</strong> module and should
be used with care. Experiment with your
<code>mod_charset_lite</code> configuration to ensure that it
performs the desired function.</p>
<p><code><a href="mod_charset_lite.html">mod_charset_lite</a></code> allows the administrator to
specify the source character set of objects as well as the
character set they should be translated into before sending to the
client. <code><a href="mod_charset_lite.html">mod_charset_lite</a></code> does not translate the
data itself but instead tells Apache what translation to
perform. <code><a href="mod_charset_lite.html">mod_charset_lite</a></code> is applicable to EBCDIC
and ASCII host environments. In an EBCDIC environment, Apache
normally translates text content from the code page of the Apache
process locale to ISO-8859-1. <code><a href="mod_charset_lite.html">mod_charset_lite</a></code>
can be used to specify that a different translation is to be
performed. In an ASCII environment, Apache normally performs no
translation, so <code><a href="mod_charset_lite.html">mod_charset_lite</a></code> is needed in
order for any translation to take place.</p>
<p>This module provides a small subset of configuration
mechanisms implemented by Russian Apache and its associated
<code>mod_charset</code>.</p>
<h2>Directives</h2><ul><li><a href="#charsetdefault">CharsetDefault</a></li><li><a href="#charsetoptions">CharsetOptions</a></li><li><a href="#charsetsourceenc">CharsetSourceEnc</a></li></ul><h2>Common Problems</h2>
<h3>Invalid character set names</h3>
<p>The character set name parameters of <a href="#charsetsourceenc" class="directive"><code class="directive">CharsetSourceEnc</code></a> and
<a href="#charsetdefault" class="directive"><code class="directive">CharsetDefault</code></a>
must be acceptable to the translation mechanism used by APR on the
system where <code><a href="mod_charset_lite.html">mod_charset_lite</a></code> is deployed. These
character set names are not standardized and are usually not the
same as the corresponding values used in http headers. Currently,
APR can only use iconv(3), so you can easily test your character
set names using the iconv(1) program, as follows:</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
iconv -f charsetsourceenc-value -t charsetdefault-value
</code></td></tr></table></blockquote>
<h3>Mismatch between character set of content and translation
rules</h3>
<p>If the translation rules don't make sense for the content,
translation can fail in various ways, including:</p>
<ul>
<li>The translation mechanism may return a bad return code,
and the connection will be aborted.</li>
<li>The translation mechanism may silently place special
characters (e.g., question marks) in the output buffer when
it cannot translate the input buffer.</li>
</ul>
<hr/><h2><a name="CharsetDefault">CharsetDefault</a> <a name="charsetdefault">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Charset to translate into</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>CharsetDefault <em>charset</em></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host, directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>FileInfo</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Experimental</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_charset_lite</td></tr></table></td></tr></table>
<p>The <code class="directive">CharsetDefault</code> directive specifies the
charset that content in the associated container should be
translated to.</p>
<p>The value of the <em>charset</em> argument must be accepted
as a valid character set name by the character set support in
APR. Generally, this means that it must be supported by
iconv.</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><p align="center"><strong>Example</strong></p><code>
<Directory "/export/home/trawick/apacheinst/htdocs/convert"><br>
CharsetSourceEnc UTF-16BE<br>
CharsetDefault ISO8859-1<br>
</Directory>
</code></td></tr></table></blockquote>
<hr/><h2><a name="CharsetOptions">CharsetOptions</a> <a name="charsetoptions">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Configures charset tranlation behavior</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>CharsetOptions <em>option</em> [<em>option</em>] ...</td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>CharsetOptions DebugLevel=0
NoImplicitAdd</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host, directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>FileInfo</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Experimental</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_charset_lite</td></tr></table></td></tr></table>
<p>The <code class="directive">CharsetOptions</code> directive configures certain
behaviors of <code><a href="mod_charset_lite.html">mod_charset_lite</a></code>. <em>Option</em> can
be one of</p>
<dl>
<dt>DebugLevel=<em>n</em></dt>
<dd>The <code>DebugLevel</code> keyword allows you to specify
the level of debug messages generated by
<code><a href="mod_charset_lite.html">mod_charset_lite</a></code>. By default, no messages are
generated. This is equivalent to <code>DebugLevel=0</code>.
With higher numbers, more debug messages are generated, and
server performance will be degraded. The actual meanings of
the numeric values are described with the definitions of the
DBGLVL_ constants near the beginning of
<code>mod_charset_lite.c</code>.</dd>
<dt>ImplicitAdd | NoImplicitAdd</dt>
<dd>The <code>ImplicitAdd</code> keyword specifies that
<code><a href="mod_charset_lite.html">mod_charset_lite</a></code> should implicitly insert its
filter when the configuration specifies that the character
set of content should be translated. If the filter chain is
explicitly configured using the AddOutputFilter directive,
<code>NoImplicitAdd</code> should be specified so that
<code><a href="mod_charset_lite.html">mod_charset_lite</a></code> doesn't add its filter.</dd>
</dl>
<hr/><h2><a name="CharsetSourceEnc">CharsetSourceEnc</a> <a name="charsetsourceenc">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Source charset of files</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>CharsetSourceEnc <em>charset</em></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host, directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>FileInfo</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Experimental</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_charset_lite</td></tr></table></td></tr></table>
<p>The <code class="directive">CharsetSourceEnc</code> directive specifies the
source charset of files in the associated container.</p>
<p>The value of the <em>charset</em> argument must be accepted
as a valid character set name by the character set support in
APR. Generally, this means that it must be supported by
iconv.</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><p align="center"><strong>example</strong></p><code>
<Directory "/export/home/trawick/apacheinst/htdocs/convert"><br>
CharsetSourceEnc UTF-16BE<br>
CharsetDefault ISO8859-1<br>
</Directory>
</code></td></tr></table></blockquote>
<p>The character set names in this example work with the iconv
translation support in Solaris 8.</p>
<hr/></blockquote><h3 align="center">Apache HTTP Server Version 2.0</h3><a href="./"><img src="../images/index.gif" alt="Index"/></a><a href="../"><img src="../images/home.gif" alt="Home"/></a></body></html>
1.1 httpd-2.0/docs/manual/mod/mod_dav.html.en
Index: mod_dav.html.en
===================================================================
<html xmlns="http://www.w3.org/TR/xhtml1/strict"><head><!--
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
This file is generated from xml source: DO NOT EDIT
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
--><title>mod_dav- Apache HTTP Server</title><link href="../style/manual.css" type="text/css" rel="stylesheet"/></head><body><blockquote><div align="center"><img src="../images/sub.gif" alt="[APACHE DOCUMENTATION]"/><h3>Apache HTTP Server Version 2.0</h3></div><h1 align="center">Apache Module mod_dav</h1><table cellspacing="1" cellpadding="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td valign="top"><span class="help">Description:</span></td><td>Distributed Authoring and Versioning
(<a href="http://www.webdav.org/">WebDAV</a>) functionality</td></tr><tr><td><a href="module-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="module-dict.html#ModuleIdentifier" class="help">Module Identifier:</a></td><td>dav_module</td></tr></table></td></tr></table><h2>Summary</h2>
<p>This module provides class 1 and class 2 <a href="http://www.webdav.org">WebDAV</a> ('Web-based Distributed
Authoring and Versioning') functionality for Apache. This
extension to the HTTP protocol allows creating, moving,
copying, and deleting resources and collections on a remote web
server.</p>
<p>To enable mod_dav, add the following to a container in your
<code>httpd.conf</code> file:</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>Dav On</code></td></tr></table></blockquote>
<p>Also, specify a valid filename for the DAV lock database by
adding the following to the global section in your
<code>httpd.conf</code> file:</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>DavLockDB /tmp/DavLock
<em>(Any web-server writable filename, without an
extension)</em>
</code></td></tr></table></blockquote>
<h2>Directives</h2><ul><li><a href="#dav">Dav</a></li><li><a href="#davdepthinfinity">DavDepthInfinity</a></li><li><a href="#davlockdb">DavLockDB</a></li><li><a href="#davmintimeout">DavMinTimeout</a></li></ul><hr/><h2><a name="Dav">Dav</a> <a name="dav">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Enable WebDAV HTTP methods</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>Dav on|off</td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>Dav off</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>directory</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_dav</td></tr></table></td></tr></table>
<p>Use the <code class="directive">Dav</code> directive to enable the
WebDAV HTTP methods for the given container. You may wish to add a
<a href="core.html#limit" class="directive"><code class="directive"><Limit></code></a> clause
inside the <a href="core.html#location" class="directive"><code class="directive"><location></code></a> directive to limit access to
DAV-enabled locations.</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><p align="center"><strong>Example</strong></p><code>
DavLockDB /tmp/DavLock<br>
<br>
<Location /foo><br>
Dav On<br>
<br>
AuthType Basic<br>
AuthName DAV<br>
AuthUserFile user.passwd<br>
<br>
<LimitExcept GET HEAD OPTIONS><br>
require user admin<br>
</LimitExcept><br>
</Location><br>
</code></td></tr></table></blockquote>
<hr/><h2><a name="DavDepthInfinity">DavDepthInfinity</a> <a name="davdepthinfinity">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Allow PROPFIND, Depth: Infinity requests</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>DavDepthInfinity on|off</td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>DavDepthInfinity off</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>directory</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_dav</td></tr></table></td></tr></table>
<p>Use the <code class="directive">DavDepthInfinity</code> directive to
allow the processing of PROPFIND requests containing the header
'Depth: Infinity'. Because this type of request could constitute a
denial-of-service attack, by default it is not allowed.</p>
<hr/><h2><a name="DavLockDB">DavLockDB</a> <a name="davlockdb">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Location of the DAV lock database</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>DavLockDB <em>file-path</em></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_dav</td></tr></table></td></tr></table>
<p>Use the <code class="directive">DavLockDB</code> directive to specify
the full path to the lock database, excluding an extension. The
default (file system) implementation of mod_dav uses a SDBM
database to track user locks. The utility
<code>modules/dav/util/lockview</code> can be used from the server
to display all locks in a lock database.</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><p align="center"><strong>Example</strong></p><code>
DavLockDB /tmp/DavLock
</code></td></tr></table></blockquote>
<hr/><h2><a name="DavMinTimeout">DavMinTimeout</a> <a name="davmintimeout">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Minimum amount of time the server holds a lock on
a DAV resource</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>DavMinTimeout <em>seconds</em></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>DavMinTimeout 0</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>directory</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_dav</td></tr></table></td></tr></table>
<p>When a client requests a DAV resource lock, it can also
specify a time when the lock will be automatically removed by
the server. This value is only a request, and the server can
ignore it or inform the client of an arbitrary value.</p>
<p>Use the <code class="directive">DavMinTimeout</code> directive to specify, in
seconds, the minimum lock timeout to return to a client.
Microsoft Web Folders defaults to a timeout of 120 seconds; the
<code class="directive">DavMinTimeout</code> can override this to a higher value
(like 600 seconds) to reduce the chance of the client losing
the lock due to network latency.</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><p align="center"><strong>Example</strong></p><code>
<Location /MSWord><br>
DavMinTimeout 600<br>
</Location><br>
</code></td></tr></table></blockquote>
<hr/></blockquote><h3 align="center">Apache HTTP Server Version 2.0</h3><a href="./"><img src="../images/index.gif" alt="Index"/></a><a href="../"><img src="../images/home.gif" alt="Home"/></a></body></html>
1.1 httpd-2.0/docs/manual/mod/mod_deflate.html.en
Index: mod_deflate.html.en
===================================================================
<html xmlns="http://www.w3.org/TR/xhtml1/strict"><head><!--
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
This file is generated from xml source: DO NOT EDIT
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
--><title>mod_deflate- Apache HTTP Server</title><link href="../style/manual.css" type="text/css" rel="stylesheet"/></head><body><blockquote><div align="center"><img src="../images/sub.gif" alt="[APACHE DOCUMENTATION]"/><h3>Apache HTTP Server Version 2.0</h3></div><h1 align="center">Apache Module mod_deflate</h1><table cellspacing="1" cellpadding="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td valign="top"><span class="help">Description:</span></td><td>Compress content before
it is delivered to the client</td></tr><tr><td><a href="module-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="module-dict.html#ModuleIdentifier" class="help">Module Identifier:</a></td><td>deflate_module</td></tr></table></td></tr></table><h2>Summary</h2>
<p>The <code><a href="mod_deflate.html">mod_deflate</a></code> module provides
the <code>DEFLATE</code> output filter that allows output from
your server to be compressed before being sent to the client over
the network.</p>
<h2>Directives</h2><ul><li><a href="#deflatebuffersize">DeflateBufferSize</a></li><li><a href="#deflatefilternote">DeflateFilterNote</a></li><li><a href="#deflatememlevel">DeflateMemLevel</a></li><li><a href="#deflatewindowsize">DeflateWindowSize</a></li></ul><p><strong>See also </strong></p><ul><li><a href="mod_mime.html#addoutputfilter" class="directive"><code class="directive">AddOutputFilter</code></a></li><li><a href="core.html#setoutputfilter" class="directive"><code class="directive">SetOutputFilter</code></a></li></ul><h2>Enabling Compression</h2>
<p>Compression is implemented by the <code>DEFLATE</code>
<a href="../filter.html">filter</a>. The following directive
will enable compression for documents in the container where it
is placed:</p>
<p><strong>Most popular browsers can not handle compression of all content
so you may want to enable the 'gzip-only-text/html' note (see below)
</strong></p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>SetEnv gzip-only-text/html 1<br>
SetOutputFilter DEFLATE
</code></td></tr></table></blockquote>
<p>Here is an example of enabling compression for the Apache
documentation:</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
<Directory "/your-server-root/manual"><br>
SetEnv gzip-only-text/html 1<br>
SetOutputFilter DEFLATE<br>
</Directory>
</code></td></tr></table></blockquote>
<hr/><h2><a name="DeflateBufferSize">DeflateBufferSize</a> <a name="deflatebuffersize">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Fragment size to be compressed at one time by zlib</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>DeflateBufferSize <em>value</em></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_deflate</td></tr></table></td></tr></table>
<p>The <code class="directive">DeflateBufferSize</code> directive specifies
the size in bytes of the fragments that zlib should compress at one
time.</p>
<hr/><h2><a name="DeflateFilterNote">DeflateFilterNote</a> <a name="deflatefilternote">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Places the compression ratio in a note for logging</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>DeflateFilterNote <em>notename</em></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_deflate</td></tr></table></td></tr></table>
<p>The <code class="directive">DeflateFilterNote</code> directive
specifies that a note about compression ratios should be attached
to the request. The name of the note is the value specified for
the directive.</p>
<hr/><h2><a name="DeflateMemLevel">DeflateMemLevel</a> <a name="deflatememlevel">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Amount of memory available to zlib for compression</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>DeflateMemLevel <em>value</em></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_deflate</td></tr></table></td></tr></table>
<p>The <code class="directive">DeflateMemLevel</code> directive specifies
the amount of memory in bytes available to zlib for compression.</p>
<hr/><h2><a name="DeflateWindowSize">DeflateWindowSize</a> <a name="deflatewindowsize">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Zlib compression window size</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>DeflateWindowSize <em>value</em></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_deflate</td></tr></table></td></tr></table>
<p>The <code class="directive">DeflateWindowSize</code> directive specifies the
zlib compression window size (a value between 1 and 15).</p>
<hr/></blockquote><h3 align="center">Apache HTTP Server Version 2.0</h3><a href="./"><img src="../images/index.gif" alt="Index"/></a><a href="../"><img src="../images/home.gif" alt="Home"/></a></body></html>
1.1 httpd-2.0/docs/manual/mod/mod_dir.html.en
Index: mod_dir.html.en
===================================================================
<html xmlns="http://www.w3.org/TR/xhtml1/strict"><head><!--
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
This file is generated from xml source: DO NOT EDIT
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
--><title>mod_dir- Apache HTTP Server</title><link href="../style/manual.css" type="text/css" rel="stylesheet"/></head><body><blockquote><div align="center"><img src="../images/sub.gif" alt="[APACHE DOCUMENTATION]"/><h3>Apache HTTP Server Version 2.0</h3></div><h1 align="center">Apache Module mod_dir</h1><table cellspacing="1" cellpadding="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td valign="top"><span class="help">Description:</span></td><td>Provides for "trailing slash" redirects and
serving directory index files</td></tr><tr><td><a href="module-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="module-dict.html#ModuleIdentifier" class="help">Module Identifier:</a></td><td>dir_module</td></tr></table></td></tr></table><h2>Summary</h2>
<p>The index of a directory can come from one of two sources:</p>
<ul>
<li>A file written by the user, typically called
<code>index.html</code>. The <a href="#directoryindex" class="directive"><code class="directive">DirectoryIndex</code></a> directive sets the
name of this file. This is controlled by
<code><a href="mod_dir.html">mod_dir</a></code>.</li>
<li>Otherwise, a listing generated by the server. This is
provided by <code><a href="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>A "trailing slash" redirect is issued when the server
receives a request for a URL
<code>http://servername/foo/dirname</code> where
<code>dirname</code> is a directory. Directories require a
trailing slash, so <code><a href="mod_dir.html">mod_dir</a></code> issues a redirect to
<code>http://servername/foo/dirname/</code>.</p>
<h2>Directives</h2><ul><li><a href="#directoryindex">DirectoryIndex</a></li></ul><hr/><h2><a name="DirectoryIndex">DirectoryIndex</a> <a name="directoryindex">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>List of resources to look for when the client requests
a directory</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>DirectoryIndex
<em>local-url</em> [<em>local-url</em>] ...</td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>DirectoryIndex index.html</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host, directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>Indexes</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_dir</td></tr></table></td></tr></table>
<p>The <code class="directive">DirectoryIndex</code> directive sets the
list of resources to look for, when the client requests an index
of the directory by specifying a / at the end of the a directory
name. <em>Local-url</em> is the (%-encoded) URL of a document on
the server relative to the requested directory; it is usually the
name of a file in the directory. Several URLs may be given, in
which case the server will return the first one that it finds. If
none of the resources exist and the <code>Indexes</code> option is
set, the server will generate its own listing of the
directory.</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><p align="center"><strong>Example</strong></p><code>
DirectoryIndex index.html
</code></td></tr></table></blockquote>
<p>then a request for <code>http://myserver/docs/</code> would
return <code>http://myserver/docs/index.html</code> if it
exists, or would list the directory if it did not.</p>
<p>Note that the documents do not need to be relative to the
directory;</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>DirectoryIndex index.html index.txt /cgi-bin/index.pl</code></td></tr></table></blockquote>
<p>would cause the CGI script <code>/cgi-bin/index.pl</code> to be
executed if neither <code>index.html</code> or
<code>index.txt</code> existed in a directory.</p>
<hr/></blockquote><h3 align="center">Apache HTTP Server Version 2.0</h3><a href="./"><img src="../images/index.gif" alt="Index"/></a><a href="../"><img src="../images/home.gif" alt="Home"/></a></body></html>
1.1 httpd-2.0/docs/manual/mod/mod_env.html.en
Index: mod_env.html.en
===================================================================
<html xmlns="http://www.w3.org/TR/xhtml1/strict"><head><!--
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
This file is generated from xml source: DO NOT EDIT
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
--><title>mod_env- Apache HTTP Server</title><link href="../style/manual.css" type="text/css" rel="stylesheet"/></head><body><blockquote><div align="center"><img src="../images/sub.gif" alt="[APACHE DOCUMENTATION]"/><h3>Apache HTTP Server Version 2.0</h3></div><h1 align="center">Apache Module mod_env</h1><table cellspacing="1" cellpadding="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td valign="top"><span class="help">Description:</span></td><td>Modifies the environment which is
passed to CGI scripts and SSI pages</td></tr><tr><td><a href="module-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="module-dict.html#ModuleIdentifier" class="help">Module Identifier:</a></td><td>env_module</td></tr></table></td></tr></table><h2>Summary</h2>
<p>This module allows for control of the environment that will
be provided to CGI scripts and SSI pages. Environment variables
may be passed from the shell which invoked the httpd process.
Alternatively, environment variables may be set or unset within
the configuration process.</p>
<h2>Directives</h2><ul><li><a href="#passenv">PassEnv</a></li><li><a href="#setenv">SetEnv</a></li><li><a href="#unsetenv">UnsetEnv</a></li></ul><p><strong>See also </strong></p><ul><li><a href="../env.html">Environment Variables</a></li></ul><hr/><h2><a name="PassEnv">PassEnv</a> <a name="passenv">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Passes environment variables from the shell</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>PassEnv
<em>env-variable</em> [<em>env-variable</em>] ...</td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host, directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>FileInfo</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_env</td></tr></table></td></tr></table>
<p>Specifies one or more environment variables to pass to CGI
scripts and SSI pages from the environment of the shell which
invoked the httpd process. Example:</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
PassEnv LD_LIBRARY_PATH
</code></td></tr></table></blockquote>
<hr/><h2><a name="SetEnv">SetEnv</a> <a name="setenv">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Sets environment variables</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>SetEnv <em>env-variable value</em></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host, directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>FileInfo</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_env</td></tr></table></td></tr></table>
<p>Sets an environment variable, which is then passed on to CGI
scripts and SSI pages. Example:</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
SetEnv SPECIAL_PATH /foo/bin
</code></td></tr></table></blockquote>
<hr/><h2><a name="UnsetEnv">UnsetEnv</a> <a name="unsetenv">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Removes variables from the environment</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>UnsetEnv <em>env-variable</em> [<em>env-variable</em>] ...</td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host, directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>FileInfo</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_env</td></tr></table></td></tr></table>
<p>Removes one or more environment variables from those passed
on to CGI scripts and SSI pages. Example:</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
UnsetEnv LD_LIBRARY_PATH
</code></td></tr></table></blockquote>
<hr/></blockquote><h3 align="center">Apache HTTP Server Version 2.0</h3><a href="./"><img src="../images/index.gif" alt="Index"/></a><a href="../"><img src="../images/home.gif" alt="Home"/></a></body></html>
1.1 httpd-2.0/docs/manual/mod/mod_example.html.en
Index: mod_example.html.en
===================================================================
<html xmlns="http://www.w3.org/TR/xhtml1/strict"><head><!--
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
This file is generated from xml source: DO NOT EDIT
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
--><title>mod_example- Apache HTTP Server</title><link href="../style/manual.css" type="text/css" rel="stylesheet"/></head><body><blockquote><div align="center"><img src="../images/sub.gif" alt="[APACHE DOCUMENTATION]"/><h3>Apache HTTP Server Version 2.0</h3></div><h1 align="center">Apache Module mod_example</h1><table cellspacing="1" cellpadding="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td valign="top"><span class="help">Description:</span></td><td>Illustrates the Apache module API</td></tr><tr><td><a href="module-dict.html#Status" class="help">Status:</a></td><td>Experimental</td></tr><tr><td><a href="module-dict.html#ModuleIdentifier" class="help">Module Identifier:</a></td><td>example_module</td></tr></table></td></tr></table><h2>Summary</h2>
<blockquote><table><tr><td bgcolor="#ffe5f5">
This document has not been updated
to take into account changes made in the 2.0 version of the
Apache HTTP Server. Some of the information may still be
relevant, but please use it with care.
</td></tr></table></blockquote>
<p>The files in the <code>src/modules/example directory</code>
under the Apache distribution directory tree are provided as an
example to those that wish to write modules that use the Apache
API.</p>
<p>The main file is <code>mod_example.c</code>, which
illustrates all the different callback mechanisms and call
syntaxes. By no means does an add-on module need to include
routines for all of the callbacks - quite the contrary!</p>
<p>The example module is an actual working module. If you link
it into your server, enable the "example-handler" handler for a
location, and then browse to that location, you will see a
display of some of the tracing the example module did as the
various callbacks were made.</p>
<h2>Directives</h2><ul><li><a href="#example">Example</a></li></ul><h2>Compiling the example module</h2>
<p>To include the example module in your server, follow the
steps below:</p>
<ol>
<li>
Uncomment the "AddModule modules/example/mod_example" line
near the bottom of the <code>src/Configuration</code> file.
If there isn't one, add it; it should look like this:
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
AddModule modules/example/mod_example.o
</code></td></tr></table></blockquote>
</li>
<li>Run the <code>src/Configure</code> script
("<code>cd src; ./Configure</code>"). This will
build the Makefile for the server itself, and update the
<code>src/modules/Makefile</code> for any additional modules
you have requested from beneath that subdirectory.</li>
<li>Make the server (run "<code>make</code>" in the
<code>src</code> directory).</li>
</ol>
<p>To add another module of your own:</p>
<ol type="A">
<li><code>mkdir src/modules/<em>mymodule</em></code></li>
<li><code>cp src/modules/example/*
src/modules/<em>mymodule</em></code></li>
<li>Modify the files in the new directory.</li>
<li>Follow steps [1] through [3] above, with appropriate
changes.</li>
</ol>
<h2>Using the <code>mod_example</code> Module</h2>
<p>To activate the example module, include a block similar to
the following in your <code>srm.conf</code> file:</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
<Location /example-info><br>
SetHandler example-handler<br>
</Location>
</code></td></tr></table></blockquote>
<p>As an alternative, you can put the following into a <a href="core.html#accessfilename"><code>.htaccess</code></a> file
and then request the file "test.example" from that location:</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
AddHandler example-handler .example
</code></td></tr></table></blockquote>
<p>After reloading/restarting your server, you should be able
to browse to this location and see the brief display mentioned
earlier.</p>
<hr/><h2><a name="Example">Example</a> <a name="example">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Demonstration directive to illustrate the Apache module
API</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>Example</td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host, directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Experimental</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_example</td></tr></table></td></tr></table>
<p>The <code class="directive">Example</code> directive just sets a demonstration
flag which the example module's content handler displays. It
takes no arguments. If you browse to an URL to which the
example content-handler applies, you will get a display of the
routines within the module and how and in what order they were
called to service the document request. The effect of this
directive one can observe under the point "<code>Example
directive declared here: YES/NO</code>".</p>
<hr/></blockquote><h3 align="center">Apache HTTP Server Version 2.0</h3><a href="./"><img src="../images/index.gif" alt="Index"/></a><a href="../"><img src="../images/home.gif" alt="Home"/></a></body></html>
1.1 httpd-2.0/docs/manual/mod/mod_expires.html.en
Index: mod_expires.html.en
===================================================================
<html xmlns="http://www.w3.org/TR/xhtml1/strict"><head><!--
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
This file is generated from xml source: DO NOT EDIT
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
--><title>mod_expires- Apache HTTP Server</title><link href="../style/manual.css" type="text/css" rel="stylesheet"/></head><body><blockquote><div align="center"><img src="../images/sub.gif" alt="[APACHE DOCUMENTATION]"/><h3>Apache HTTP Server Version 2.0</h3></div><h1 align="center">Apache Module mod_expires</h1><table cellspacing="1" cellpadding="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td valign="top"><span class="help">Description:</span></td><td>Generation of
<code>Expires</code> HTTP headers according to user-specified
criteria</td></tr><tr><td><a href="module-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="module-dict.html#ModuleIdentifier" class="help">Module Identifier:</a></td><td>expires_module</td></tr></table></td></tr></table><h2>Summary</h2>
<p>This module controls the setting of the <code>Expires</code>
HTTP header in server responses. The expiration date can set to
be relative to either the time the source file was last
modified, or to the time of the client access.</p>
<p>The <code>Expires</code> HTTP header is an instruction to
the client about the document's validity and persistence. If
cached, the document may be fetched from the cache rather than
from the source until this time has passed. After that, the
cache copy is considered "expired" and invalid, and a new copy
must be obtained from the source.</p>
<h2>Directives</h2><ul><li><a href="#expiresactive">ExpiresActive</a></li><li><a href="#expiresbytype">ExpiresByType</a></li><li><a href="#expiresdefault">ExpiresDefault</a></li></ul><h2><a name="AltSyn">Alternate Interval
Syntax</a></h2>
<p>The <a href="#expiresdefault" class="directive"><code class="directive">ExpiresDefault</code></a> and
<a href="#expiresbytype" class="directive"><code class="directive">ExpiresByType</code></a> directives
can also be defined in a more readable syntax of the form:</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
ExpiresDefault "<base> [plus] {<num>
<type>}*"<br>
ExpiresByType type/encoding "<base> [plus]
{<num> <type>}*"
</code></td></tr></table></blockquote>
<p>where <base> is one of:</p>
<ul>
<li><code>access</code></li>
<li><code>now</code> (equivalent to
'<code>access</code>')</li>
<li><code>modification</code></li>
</ul>
<p>The '<code>plus</code>' keyword is optional. <num>
should be an integer value [acceptable to <code>atoi()</code>],
and <type> is one of:</p>
<ul>
<li><code>years</code></li>
<li><code>months</code></li>
<li><code>weeks</code></li>
<li><code>days</code></li>
<li><code>hours</code></li>
<li><code>minutes</code></li>
<li><code>seconds</code></li>
</ul>
<p>For example, any of the following directives can be used to
make documents expire 1 month after being accessed, by
default:</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
ExpiresDefault "access plus 1 month"<br>
ExpiresDefault "access plus 4 weeks"<br>
ExpiresDefault "access plus 30 days"
</code></td></tr></table></blockquote>
<p>The expiry time can be fine-tuned by adding several
'<num> <type>' clauses:</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
ExpiresByType text/html "access plus 1 month 15
days 2 hours"<br>
ExpiresByType image/gif "modification plus 5 hours 3
minutes"
</code></td></tr></table></blockquote>
<p>Note that if you use a modification date based setting, the
Expires header will <strong>not</strong> be added to content
that does not come from a file on disk. This is due to the fact
that there is no modification time for such content.</p>
<hr/><h2><a name="ExpiresActive">ExpiresActive</a> <a name="expiresactive">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Enables generation of Expires headers</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>ExpiresActive On|Off</td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host, directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>Indexes</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_expires</td></tr></table></td></tr></table>
<p>This directive enables or disables the generation of the
<code>Expires</code> header for the document realm in question.
(That is, if found in an <code>.htaccess</code> file, for
instance, it applies only to documents generated from that
directory.) If set to <em><code>Off</code></em>, no
<code>Expires</code> header will be generated for any document
in the realm (unless overridden at a lower level, such as an
<code>.htaccess</code> file overriding a server config file).
If set to <em><code>On</code></em>, the header will be added to
served documents according to the criteria defined by the
<a href="#expiresbytype" class="directive"><code class="directive">ExpiresByType</code></a> and
<a href="#expiresdefault" class="directive"><code class="directive">ExpiresDefault</code></a> directives
(<em>q.v.</em>).</p>
<p>Note that this directive does not guarantee that an
<code>Expires</code> header will be generated. If the criteria
aren't met, no header will be sent, and the effect will be as
though this directive wasn't even specified.</p>
<hr/><h2><a name="ExpiresByType">ExpiresByType</a> <a name="expiresbytype">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Value of the Expires header configured
by MIME type</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>ExpiresByType
<em>MIME-type <code>seconds</em></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host, directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>Indexes</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_expires</td></tr></table></td></tr></table>
<p>This directive defines the value of the <code>Expires</code>
header generated for documents of the specified type
(<em>e.g.</em>, <code>text/html</code>). The second argument
sets the number of seconds that will be added to a base time to
construct the expiration date.</p>
<p>The base time is either the last modification time of the
file, or the time of the client's access to the document. Which
should be used is specified by the
<code><em><code></em></code> field; <strong>M</strong>
means that the file's last modification time should be used as
the base time, and <strong>A</strong> means the client's access
time should be used.</p>
<p>The difference in effect is subtle. If <em>M</em> is used,
all current copies of the document in all caches will expire at
the same time, which can be good for something like a weekly
notice that's always found at the same URL. If <em>A</em> is
used, the date of expiration is different for each client; this
can be good for image files that don't change very often,
particularly for a set of related documents that all refer to
the same images (<em>i.e.</em>, the images will be accessed
repeatedly within a relatively short timespan).</p>
<p><strong>Example:</strong></p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
# enable expirations<br>
ExpiresActive On<br>
# expire GIF images after a month in the client's cache<br>
ExpiresByType image/gif A2592000<br>
# HTML documents are good for a week from the time they were changed<br>
ExpiresByType text/html M604800
</code></td></tr></table></blockquote>
<p>Note that this directive only has effect if
<code>ExpiresActive On</code> has been specified. It overrides,
for the specified MIME type <em>only</em>, any expiration date
set by the <a href="#expiresdefault" class="directive"><code class="directive">ExpiresDefault</code></a>
directive.</p>
<p>You can also specify the expiration time calculation using
an <a href="#AltSyn">alternate syntax</a>, described earlier in
this document.</p>
<hr/><h2><a name="ExpiresDefault">ExpiresDefault</a> <a name="expiresdefault">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Default algorithm for calculating expiration time</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>ExpiresDefault <em><code>seconds</em></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host, directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>Indexes</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_expires</td></tr></table></td></tr></table>
<p>This directive sets the default algorithm for calculating the
expiration time for all documents in the affected realm. It can be
overridden on a type-by-type basis by the <a href="#expiresbytype" class="directive"><code class="directive">ExpiresByType</code></a> directive. See the
description of that directive for details about the syntax of the
argument, and the <a href="#AltSyn">alternate syntax</a>
description as well.</p>
<hr/></blockquote><h3 align="center">Apache HTTP Server Version 2.0</h3><a href="./"><img src="../images/index.gif" alt="Index"/></a><a href="../"><img src="../images/home.gif" alt="Home"/></a></body></html>
1.1 httpd-2.0/docs/manual/mod/mod_ext_filter.html.en
Index: mod_ext_filter.html.en
===================================================================
<html xmlns="http://www.w3.org/TR/xhtml1/strict"><head><!--
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
This file is generated from xml source: DO NOT EDIT
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
--><title>mod_ext_filter- Apache HTTP Server</title><link href="../style/manual.css" type="text/css" rel="stylesheet"/></head><body><blockquote><div align="center"><img src="../images/sub.gif" alt="[APACHE DOCUMENTATION]"/><h3>Apache HTTP Server Version 2.0</h3></div><h1 align="center">Apache Module mod_ext_filter</h1><table cellspacing="1" cellpadding="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td valign="top"><span class="help">Description:</span></td><td>Pass the response body
through an external program before delivery to the
client</td></tr><tr><td><a href="module-dict.html#Status" class="help">Status:</a></td><td>Experimental</td></tr><tr><td><a href="module-dict.html#ModuleIdentifier" class="help">Module Identifier:</a></td><td>ext_filter_module</td></tr></table></td></tr></table><h2>Summary</h2>
<p>This is an <strong>experimental</strong> module and should
be used with care. Test your <code><a href="mod_ext_filter.html">mod_ext_filter</a></code>
configuration carefully to ensure that it performs the desired
function. You may wish to review <a href="../filter.html">
this information</a> for background on the Apache filtering
model.</p>
<p><code><a href="mod_ext_filter.html">mod_ext_filter</a></code> presents a simple and familiar
programming model for filters. With this module, a program
which reads from stdin and writes to stdout (i.e., a Unix-style
filter command) can be a filter for Apache. This filtering
mechanism is much slower than using a filter which is specially
written for the Apache API and runs inside of the Apache server
process, but it does have the following benefits:</p>
<ul>
<li>the programming model is much simpler</li>
<li>any programming/scripting language can be used, provided
that it allows the program to read from standard input and
write to standard output</li>
<li>existing programs can be used unmodified as Apache
filters</li>
</ul>
<p>Even when the performance characteristics are not suitable
for production use, <code>mod_ext_filter</code> can be used as
a prototype environment for filters.</p>
<h2>Directives</h2><ul><li><a href="#extfilterdefine">ExtFilterDefine</a></li><li><a href="#extfilteroptions">ExtFilterOptions</a></li></ul><h2>Examples</h2>
<h3>Generating HTML from some other type of response</h3>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
<pre>
# mod_ext_filter directive to define a filter to HTML-ize text/c files
# using the external program /usr/bin/enscript, with the type of the
# result set to text/html
ExtFilterDefine c-to-html mode=output intype=text/c outtype=text/html \
cmd="/usr/bin/enscript --color -W html -Ec -o - -"
<Directory "/export/home/trawick/apacheinst/htdocs/c">
# core directive to cause the new filter to be run on output
SetOutputFilter c-to-html
# mod_mime directive to set the type of .c files to text/c
AddType text/c .c
# mod_ext_filter directive to set the debug level just high
# enough to see a log message per request showing the configuration
# in force
ExtFilterOptions DebugLevel=1
</Directory>
</pre>
</code></td></tr></table></blockquote>
<h3>Implementing a content encoding filter</h3>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
<pre>
# mod_ext_filter directive to define the external filter
ExtFilterDefine gzip mode=output cmd=/bin/gzip
<Location /gzipped>
# core directive to cause the gzip filter to be run on output
SetOutputFilter gzip
# mod_header directive to add "Content-Encoding: gzip" header field
Header set Content-Encoding gzip
</Location>
</pre>
</code></td></tr></table></blockquote>
<p>Note: this gzip example is just for the purposes of illustration.
Please refer to <code><a href="mod_deflate.html">mod_deflate</a></code> for a practical
implementation.</p>
<h3>Slowing down the server</h3>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
<pre>
# mod_ext_filter directive to define a filter which runs everything
# through cat; cat doesn't modify anything; it just introduces extra
# pathlength and consumes more resources
ExtFilterDefine slowdown mode=output cmd=/bin/cat preservescontentlength
<Location />
# core directive to cause the slowdown filter to be run several times on
# output
SetOutputFilter slowdown slowdown slowdown
</Location>
</pre>
</code></td></tr></table></blockquote>
<hr/><h2><a name="ExtFilterDefine">ExtFilterDefine</a> <a name="extfilterdefine">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td/></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>ExtFilterDefine <em>filtername</em> <em>parameters</em></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Experimental</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_ext_filter</td></tr></table></td></tr></table>
<p>The <code class="directive">ExtFilterDefine</code> directive defines the
characteristics of an external filter, including the program to
run and its arguments.</p>
<p><em>filtername</em> specifies the name of the filter being
defined. This name can then be used in SetOutputFilter
directives. It must be unique among all registered filters.
<em>At the present time, no error is reported by the
register-filter API, so a problem with duplicate names isn't
reported to the user.</em></p>
<p>Subsequent parameters can appear in any order and define the
external command to run and certain other characteristics. The
only required parameter is <em>cmd=</em>. These parameters
are:</p>
<dl>
<dt>cmd=<em>cmdline</em></dt>
<dd>The <code>cmd=</code> keyword allows you to specify the
external command to run. If there are arguments after the
program name, the command line should be surrounded in
quotation marks.</dd>
<dt>mode=<em>mode</em></dt>
<dd><em>mode</em> should be <em>output</em> for now (the
default). In the future, <em>mode=input</em> will be used to
specify a filter for request bodies.</dd>
<dt>intype=<em>imt</em></dt>
<dd>This parameter specifies the internet media type (i.e.,
MIME type) of documents which should be filtered. By default,
all documents are filtered. If <code>intype=</code> is
specified, the filter will be disabled for documents of other
types.</dd>
<dt>outtype=<em>imt</em></dt>
<dd>This parameter specifies the internet media type (i.e.,
MIME type) of filtered documents. It is useful when the
filter changes the internet media type as part of the
filtering operation. By default, the internet media type is
unchanged.</dd>
<dt>PreservesContentLength</dt>
<dd>The <code>PreservesContentLength</code> keyword specifies
that the filter preserves the content length. This is not the
default, as most filters change the content length. In the
event that the filter doesn't modify the length, this keyword
should be specified.</dd>
</dl>
<hr/><h2><a name="ExtFilterOptions">ExtFilterOptions</a> <a name="extfilteroptions">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td/></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>ExtFilterOptions
<em>option</em> [<em>option</em>] ...</td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>ExtFilterOptions DebugLevel=0 NoLogStderr</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>directory</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Experimental</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_ext_filter</td></tr></table></td></tr></table>
<p>The <code class="directive">ExtFilterOptions</code> directive specifies
special processing options for <code>mod_ext_filter</code>.
<em>Option</em> can be one of</p>
<dl>
<dt>DebugLevel=<em>n</em></dt>
<dd>
The <code>DebugLevel</code> keyword allows you to specify
the level of debug messages generated by
<code>mod_ext_filter</code>. By default, no debug messages
are generated. This is equivalent to
<code>DebugLevel=0</code>. With higher numbers, more debug
messages are generated, and server performance will be
degraded. The actual meanings of the numeric values are
described with the definitions of the DBGLVL_ constants
near the beginning of <code>mod_ext_filter.c</code>.
<p>Note: The core directive LogLevel should be used to
cause debug messages to be stored in the Apache error
log.</p>
</dd>
<dt>LogStderr | NoLogStderr</dt>
<dd>The <code>LogStderr</code> keyword specifies that
messages written to standard error by the external filter
program will be saved in the Apache error log.
<code>NoLogStderr</code> disables this feature.</dd>
</dl>
<p>Example:</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
ExtFilterOptions LogStderr DebugLevel=0
</code></td></tr></table></blockquote>
<p>Messages written to the filter's standard error will be stored
in the Apache error log. No debug messages will be generated by
<code><a href="mod_ext_filter.html">mod_ext_filter</a></code>. </p>
<hr/></blockquote><h3 align="center">Apache HTTP Server Version 2.0</h3><a href="./"><img src="../images/index.gif" alt="Index"/></a><a href="../"><img src="../images/home.gif" alt="Home"/></a></body></html>
1.1 httpd-2.0/docs/manual/mod/mod_file_cache.html.en
Index: mod_file_cache.html.en
===================================================================
<html xmlns="http://www.w3.org/TR/xhtml1/strict"><head><!--
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
This file is generated from xml source: DO NOT EDIT
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
--><title>mod_file_cache- Apache HTTP Server</title><link href="../style/manual.css" type="text/css" rel="stylesheet"/></head><body><blockquote><div align="center"><img src="../images/sub.gif" alt="[APACHE DOCUMENTATION]"/><h3>Apache HTTP Server Version 2.0</h3></div><h1 align="center">Apache Module mod_file_cache</h1><table cellspacing="1" cellpadding="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td valign="top"><span class="help">Description:</span></td><td>Caches a static list of files in memory</td></tr><tr><td><a href="module-dict.html#Status" class="help">Status:</a></td><td>Experimental</td></tr><tr><td><a href="module-dict.html#ModuleIdentifier" class="help">Module Identifier:</a></td><td>file_cache_module</td></tr></table></td></tr></table><h2>Summary</h2>
<blockquote><table><tr><td bgcolor="#ffe5f5">
This module should be used with care. You can easily
create a broken site using mod_file_cache, so read this
document carefully.
</td></tr></table></blockquote>
<p><em>Caching</em> frequently requested files that change very
infrequently is a technique for reducing server load.
mod_file_cache provides two techniques for caching frequently
requested <em>static</em> files. Through configuration
directives, you can direct mod_file_cache to either open then
mmap()a file, or to pre-open a file and save the file's open
<em>file handle</em>. Both techniques reduce server load when
processing requests for these files by doing part of the work
(specifically, the file I/O) for serving the file when the
server is started rather than during each request.</p>
<p>Notice: You cannot use this for speeding up CGI programs or
other files which are served by special content handlers. It
can only be used for regular files which are usually served by
the Apache core content handler.</p>
<p>This module is an extension of and borrows heavily from the
mod_mmap_static module in Apache 1.3.</p>
<h2>Directives</h2><ul><li><a href="#cachefile">CacheFile</a></li><li><a href="#mmapfile">MMapFile</a></li></ul><h2>Using mod_file_cache</h2>
<p><code><a href="mod_file_cache.html">mod_file_cache</a></code> caches a list of statically
configured files via <a href="#mmapfile" class="directive"><code class="directive">MMapFile</code></a> or <a href="#cachefile" class="directive"><code class="directive">CacheFile</code></a> directives in the
main server configuration.</p>
<p>Not all platforms support both directives. For example, Apache
on Windows does not currently support the <a href="#mmapstatic" class="directive"><code class="directive">MMapStatic</code></a> directive, while
other platforms, like AIX, support both. You will receive an error
message in the server error log if you attempt to use an
unsupported directive. If given an unsupported directive, the
server will start but the file will not be cached. On platforms
that support both directives, you should experiment with both to
see which works best for you.</p>
<h3>MmapFile Directive</h3>
<p>The <a href="#mmapfile" class="directive"><code class="directive">MmapFile</code></a>
directive of <code><a href="mod_file_cache.html">mod_file_cache</a></code> maps a list of
statically configured files into memory through the system call
<code>mmap()</code>. This system call is available on most modern
Unix derivates, but not on all. There are sometimes
system-specific limits on the size and number of files that can be
mmap()d, experimentation is probably the easiest way to find
out.</p>
<p>This mmap()ing is done once at server start or restart,
only. So whenever one of the mapped files changes on the
filesystem you <em>have</em> to restart the server (see the <a href="../stopping.html">Stopping and Restarting</a>
documentation). To reiterate that point: if the files are
modified <em>in place</em> without restarting the server you
may end up serving requests that are completely bogus. You
should update files by unlinking the old copy and putting a new
copy in place. Most tools such as <code>rdist</code> and
<code>mv</code> do this. The reason why this modules doesn't
take care of changes to the files is that this check would need
an extra <code>stat()</code> every time which is a waste and
against the intent of I/O reduction.</p>
<h3>CacheFile Directive</h3>
<p>The <a href="#cachefile" class="directive"><code class="directive">CacheFile</code></a>
directive of <code><a href="mod_file_cache.html">mod_file_cache</a></code> opens an active
<em>handle</em> or <em>file descriptor</em> to the file (or files)
listed in the configuration directive and places these open file
handles in the cache. When the file is requested, the server
retrieves the handle from the cache and passes it to the
sendfile() (or TransmitFile() on Windows), socket API.</p>
<p>Insert more details about sendfile API...</p>
<p>This file handle caching is done once at server start or
restart, only. So whenever one of the cached files changes on
the filesystem you <em>have</em> to restart the server (see the
<a href="../stopping.html">Stopping and Restarting</a>
documentation). To reiterate that point: if the files are
modified <em>in place</em> without restarting the server you
may end up serving requests that are completely bogus. You
should update files by unlinking the old copy and putting a new
copy in place. Most tools such as <code>rdist</code> and
<code>mv</code> do this.</p>
<blockquote><table><tr><td bgcolor="#e0e5f5"><p align="center"><strong>Note</strong></p> Don't bother asking for a for a
directive which recursively caches all the files in a
directory. Try this instead... See the
<a href="core.html#include" class="directive"><code class="directive">Include</code></a> directive, and consider
this command:
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
find /www/htdocs -type f -print \ <br>
| sed -e 's/.*/mmapfile &/' > /www/conf/mmap.conf
</code></td></tr></table></blockquote>
</td></tr></table></blockquote>
<hr/><h2><a name="CacheFile">CacheFile</a> <a name="cachefile">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td/></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>CacheFile
<em>file-path</em> [<em>file-path</em>] ...</td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Experimental</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_file_cache</td></tr></table></td></tr></table>
<p>The <code class="directive">CacheFile</code> directive opens handles to
one or more files (given as whitespace separated arguments) and
places these handles into the cache at server startup
time. Handles to cached files are automatically closed on a server
shutdown. When the files have changed on the filesystem, the
server should be restarted to to re-cache them.</p>
<p>Be careful with the <em>file-path</em> arguments: They have
to literally match the filesystem path Apache's URL-to-filename
translation handlers create. We cannot compare inodes or other
stuff to match paths through symbolic links <em>etc.</em>
because that again would cost extra <code>stat()</code> system
calls which is not acceptable. This module may or may not work
with filenames rewritten by <code><a href="mod_alias.html">mod_alias</a></code> or
<code><a href="mod_rewrite.html">mod_rewrite</a></code>.</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><p align="center"><strong>Example</strong></p><code>
CacheFile /usr/local/apache/htdocs/index.html
</code></td></tr></table></blockquote>
<hr/><h2><a name="MMapFile">MMapFile</a> <a name="mmapfile">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td/></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>MMapFile <em>file-path</em> [<em>file-path</em>] ...</td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Experimental</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_file_cache</td></tr></table></td></tr></table>
<p>The <code class="directive">MMapFile</code> directive maps one or more files
(given as whitespace separated arguments) into memory at server
startup time. They are automatically unmapped on a server
shutdown. When the files have changed on the filesystem at
least a HUP or USR1 signal should be send to the server to
re-mmap them.</p>
<p>Be careful with the <em>file-path</em> arguments: They have
to literally match the filesystem path Apache's URL-to-filename
translation handlers create. We cannot compare inodes or other
stuff to match paths through symbolic links <em>etc.</em>
because that again would cost extra <code>stat()</code> system
calls which is not acceptable. This module may or may not work
with filenames rewritten by <code><a href="mod_alias.html">mod_alias</a></code> or
<code><a href="mod_rewrite.html">mod_rewrite</a></code>.</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><p align="center"><strong>Example</strong></p><code>
MMapFile /usr/local/apache/htdocs/index.html
</code></td></tr></table></blockquote>
<hr/></blockquote><h3 align="center">Apache HTTP Server Version 2.0</h3><a href="./"><img src="../images/index.gif" alt="Index"/></a><a href="../"><img src="../images/home.gif" alt="Home"/></a></body></html>
1.1 httpd-2.0/docs/manual/mod/mod_headers.html.en
Index: mod_headers.html.en
===================================================================
<html xmlns="http://www.w3.org/TR/xhtml1/strict"><head><!--
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
This file is generated from xml source: DO NOT EDIT
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
--><title>mod_headers- Apache HTTP Server</title><link href="../style/manual.css" type="text/css" rel="stylesheet"/></head><body><blockquote><div align="center"><img src="../images/sub.gif" alt="[APACHE DOCUMENTATION]"/><h3>Apache HTTP Server Version 2.0</h3></div><h1 align="center">Apache Module mod_headers</h1><table cellspacing="1" cellpadding="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td valign="top"><span class="help">Description:</span></td><td>Customization of HTTP request
and response headers</td></tr><tr><td><a href="module-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="module-dict.html#ModuleIdentifier" class="help">Module Identifier:</a></td><td>headers_module</td></tr><tr><td align="left" valign="top"><a href="module-dict.html#Compatibility" class="help">Compatibility:</a></td><td><compatibility>RequestHeader is available only in Apache 2.0</compatibility></td></tr></table></td></tr></table><h2>Summary</h2>
<p>This module provides directives to control and modify HTTP
request and response headers. Headers can be merged, replaced
or removed.</p>
<h2>Directives</h2><ul><li><a href="#header">Header</a></li><li><a href="#requestheader">RequestHeader</a></li></ul><h2>Order of Processing</h2>
<p>The directives provided by mod_header can occur almost
anywhere within the server configuration. They are valid in the
main server config and virtual host sections, inside
<Directory>, <Location> and <Files> sections,
and within .htaccess files.</p>
<p>The directives are processed in the following order:</p>
<ol>
<li>main server</li>
<li>virtual host</li>
<li><Directory> sections and .htaccess</li>
<li><Location></li>
<li><Files></li>
</ol>
<p>Order is important. These two headers have a different
effect if reversed:</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
RequestHeader append MirrorID "mirror 12"<br>
RequestHeader unset MirrorID
</code></td></tr></table></blockquote>
<p>This way round, the MirrorID header is not set. If reversed,
the MirrorID header is set to "mirror 12".</p>
<h2>Example</h2>
<ol>
<li>Copy all request headers that begin with "TS" to the
response headers:
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
Header echo ^TS*
</code></td></tr></table></blockquote></li>
<li>Add a header, MyHeader, to the response including a
timestamp for when the request was received and how long it
took to begin serving the request. This header can be used by
the client to intuit load on the server or in isolating
bottlenecks between the client and the server.
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
Header add MyHeader "%D %t"
</code></td></tr></table></blockquote>
results in this header being added to the response:
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
MyHeader: D=3775428 t=991424704447256
</code></td></tr></table></blockquote>
</li>
<li>Say hello to Joe
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
Header add MyHeader "Hello Joe. It took %D microseconds for Apache to serve this request."
</code></td></tr></table></blockquote>
results in this header being added to the response:
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
MyHeader: Hello Joe. It took D=3775428 microseconds for Apache to serve this request.
</code></td></tr></table></blockquote>
</li>
<li>Conditionally send MyHeader on the response if and only
if header "MyRequestHeader" is present on the request. This
is useful for constructing headers in response to some client
stimulus. Note that this example requires the services of the
mod_setenvif module.
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
SetEnvIf MyRequestHeader value HAVE_MyRequestHeader<br>
Header add MyHeader "%D %t mytext" env=HAVE_MyRequestHeader
</code></td></tr></table></blockquote>
If the header "MyRequestHeader: value" is present on the
HTTP request, the response will contain the following
header:
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
MyHeader: D=3775428 t=991424704447256 mytext
</code></td></tr></table></blockquote>
</li>
</ol>
<hr/><h2><a name="Header">Header</a> <a name="header">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Configure HTTP response headers</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>Header set|append|add|unset|echo <em>header</em>
[<em>value</em>]</td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host, directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>FileInfo</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_headers</td></tr></table></td></tr></table>
<p>This directive can replace, merge or remove HTTP response
headers. The header is modified just after the content handler
and output filters are run, allowing outgoing headers to be
modified. The action it performs is determined by the first
argument. This can be one of the following values:</p>
<ul>
<li><strong>set</strong><br>
The response header is set, replacing any previous header
with this name. The <em>value</em> may be a format
string.</li>
<li><strong>append</strong><br>
The response header is appended to any existing header of
the same name. When a new value is merged onto an existing
header it is separated from the existing header with a comma.
This is the HTTP standard way of giving a header multiple
values.</li>
<li><strong>add</strong><br>
The response header is added to the existing set of headers,
even if this header already exists. This can result in two
(or more) headers having the same name. This can lead to
unforeseen consequences, and in general "append" should be
used instead.</li>
<li><strong>unset</strong><br>
The response header of this name is removed, if it exists.
If there are multiple headers of the same name, all will be
removed.</li>
<li><strong>echo</strong><br>
Request headers with this name are echoed back in the
response headers. <em>header</em> may be a regular
expression.</li>
</ul>
<p>This argument is followed by a <em>header</em> name, which
can include the final colon, but it is not required. Case is
ignored for set, append, add and unset. The <em>header</em>
name for echo is case sensitive and may be a regular
expression.</p>
<p>For <code>add</code>, <code>append</code> and
<code>set</code> a <em>value</em> is specified as the third
argument. If <em>value</em> contains spaces, it should be
surrounded by doublequotes. <em>value</em> may be a character
string, a string containing format specifiers or a combination
of both. The following format specifiers are supported in
<em>value</em>:</p>
<table>
<tr><td>%t: </td> <td>The time the request was received in Universal
Coordinated Time since the epoch (Jan. 1, 1970) measured in
microseconds. The value is preceded by "t=".</td></tr>
<tr><td>%D: </td> <td>The time from when the request was received to
the time the headers are sent on the wire. This is a measure of the
duration of the request. The value is preceded by "D=".</td></tr>
<tr><td>%{FOOBAR}e:</td> <td>The contents of the <a href="../env.html">environment
variable</a> FOOBAR.</td></tr>
</table>
<p>When the <code class="directive">Header</code> directive is used with the
<code>add</code>, <code>append</code>, or <code>set</code>
argument, a fourth argument may be used to specify conditions
under which the action will be taken. If the <a href="../env.html">environment variable</a> specified in the
<code>env=...</code> argument exists (or if the environment
variable does not exist and <code>env=!...</code> is specified)
then the action specified by the <code class="directive">Header</code> directive
will take effect. Otherwise, the directive will have no effect
on the request.</p>
<p>The Header directives are processed just before the response
is sent to the network. These means that it is possible to set
and/or override most headers, except for those headers added by
the header filter.</p>
<hr/><h2><a name="RequestHeader">RequestHeader</a> <a name="requestheader">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Configure HTTP request headers</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>RequestHeader set|append|add|unset <em>header</em>
[<em>value</em>]</td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host, directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>FileInfo</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_headers</td></tr></table></td></tr></table>
<p>This directive can replace, merge or remove HTTP request
headers. The header is modified just before the content handler
is run, allowing incoming headers to be modified. The action it
performs is determined by the first argument. This can be one
of the following values:</p>
<ul>
<li><strong>set</strong><br>
The request header is set, replacing any previous header
with this name</li>
<li><strong>append</strong><br>
The request header is appended to any existing header of the
same name. When a new value is merged onto an existing header
it is separated from the existing header with a comma. This
is the HTTP standard way of giving a header multiple
values.</li>
<li><strong>add</strong><br>
The request header is added to the existing set of headers,
even if this header already exists. This can result in two
(or more) headers having the same name. This can lead to
unforeseen consequences, and in general "append" should be
used instead.</li>
<li><strong>unset</strong><br>
The request header of this name is removed, if it exists. If
there are multiple headers of the same name, all will be
removed.</li>
</ul>
<p>This argument is followed by a header name, which can
include the final colon, but it is not required. Case is
ignored. For <code>add</code>, <code>append</code> and
<code>set</code> a value is given as the third argument. If
this value contains spaces, it should be surrounded by double
quotes. For unset, no value should be given.</p>
<p>The <code class="directive">RequestHeader</code> directive is processed
just before the request is run by its handler in the fixup phase.
This should allow headers generated by the browser, or by Apache
input filters to be overridden or modified.</p>
<hr/></blockquote><h3 align="center">Apache HTTP Server Version 2.0</h3><a href="./"><img src="../images/index.gif" alt="Index"/></a><a href="../"><img src="../images/home.gif" alt="Home"/></a></body></html>
1.1 httpd-2.0/docs/manual/mod/mod_imap.html.en
Index: mod_imap.html.en
===================================================================
<html xmlns="http://www.w3.org/TR/xhtml1/strict"><head><!--
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
This file is generated from xml source: DO NOT EDIT
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
--><title>mod_imap- Apache HTTP Server</title><link href="../style/manual.css" type="text/css" rel="stylesheet"/></head><body><blockquote><div align="center"><img src="../images/sub.gif" alt="[APACHE DOCUMENTATION]"/><h3>Apache HTTP Server Version 2.0</h3></div><h1 align="center">Apache Module mod_imap</h1><table cellspacing="1" cellpadding="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td valign="top"><span class="help">Description:</span></td><td>Server-side imagemap processing</td></tr><tr><td><a href="module-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="module-dict.html#ModuleIdentifier" class="help">Module Identifier:</a></td><td>imap_module</td></tr></table></td></tr></table><h2>Summary</h2>
<p>This module processes <code>.map</code> files, thereby
replacing the functionality of the <code>imagemap</code> CGI
program. Any directory or document type configured to use the
handler <code>imap-file</code> (using either
<a href="mod_mime.html#addhandler" class="directive"><code class="directive">AddHandler</code></a> or
<a href="core.html#sethandler" class="directive"><code class="directive">SetHandler</code></a>)
will be processed by this module.</p>
<p>The following directive will activate files ending with
<code>.map</code> as imagemap files:</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>AddHandler imap-file map</code></td></tr></table></blockquote>
<p>Note that the following is still supported:</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>AddType application/x-httpd-imap map</code></td></tr></table></blockquote>
<p>However, we are trying to phase out "magic MIME types" so we
are deprecating this method.</p>
<h2>Directives</h2><ul><li><a href="#imapbase">ImapBase</a></li><li><a href="#imapdefault">ImapDefault</a></li><li><a href="#imapmenu">ImapMenu</a></li></ul><h2>New Features</h2>
<p>The imagemap module adds some new features that were not
possible with previously distributed imagemap programs.</p>
<ul>
<li>URL references relative to the Referer: information.</li>
<li>Default <BASE> assignment through a new map
directive <code>base</code>.</li>
<li>No need for <code>imagemap.conf</code> file.</li>
<li>Point references.</li>
<li>Configurable generation of imagemap menus.</li>
</ul>
<h2>Imagemap File</h2>
<p>The lines in the imagemap files can have one of several
formats:</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
directive value [x,y ...]<br>
directive value "Menu text" [x,y ...]<br>
directive value x,y ... "Menu text"
</code></td></tr></table></blockquote>
<p>The directive is one of <code>base</code>,
<code>default</code>, <code>poly</code>, <code>circle</code>,
<code>rect</code>, or <code>point</code>. The value is an
absolute or relative URL, or one of the special values listed
below. The coordinates are <code>x,y</code> pairs separated by
whitespace. The quoted text is used as the text of the link if
a imagemap menu is generated. Lines beginning with '#' are
comments.</p>
<h3>Imagemap File Directives</h3>
<p>There are six directives allowed in the imagemap file. The
directives can come in any order, but are processed in the
order they are found in the imagemap file.</p>
<dl>
<dt><code>base</code> Directive</dt>
<dd>Has the effect of <code><BASE HREF="value"></code>.
The non-absolute URLs of the map-file are taken relative to
this value. The <code>base</code> directive overrides
ImapBase as set in a .htaccess file or in the server
configuration files. In the absence of an ImapBase
configuration directive, <code>base</code> defaults to
<code>http://server_name/</code>.<br>
<code>base_uri</code> is synonymous with <code>base</code>.
Note that a trailing slash on the URL is significant.</dd>
<dt><code>default</code> Directive</dt>
<dd>The action taken if the coordinates given do not fit any
of the <code>poly</code>, <code>circle</code> or
<code>rect</code> directives, and there are no
<code>point</code> directives. Defaults to
<code>nocontent</code> in the absence of an ImapDefault
configuration setting, causing a status code of <code>204 No
Content</code> to be returned. The client should keep the
same page displayed.</dd>
<dt><code>poly</code> Directive</dt>
<dd>Takes three to one-hundred points, and is obeyed if the
user selected coordinates fall within the polygon defined by
these points.</dd>
<dt><code>circle</code></dt>
<dd>Takes the center coordinates of a circle and a point on
the circle. Is obeyed if the user selected point is with the
circle.</dd>
<dt><code>rect</code> Directive</dt>
<dd>Takes the coordinates of two opposing corners of a
rectangle. Obeyed if the point selected is within this
rectangle.</dd>
<dt><code>point</code> Directive</dt>
<dd>Takes a single point. The point directive closest to the
user selected point is obeyed if no other directives are
satisfied. Note that <code>default</code> will not be
followed if a <code>point</code> directive is present and
valid coordinates are given.</dd>
</dl>
<h3>Values</h3>
<p>The values for each of the directives can any of the following:</p>
<dl>
<dt>a URL</dt>
<dd>The URL can be relative or absolute URL. Relative URLs
can contain '..' syntax and will be resolved relative to the
<code>base</code> value.<br>
<code>base</code> itself will not resolved according to the
current value. A statement <code>base mailto:</code> will
work properly, though.</dd>
<dt><code>map</code></dt>
<dd>Equivalent to the URL of the imagemap file itself. No
coordinates are sent with this, so a menu will be generated
unless ImapMenu is set to 'none'.</dd>
<dt><code>menu</code></dt>
<dd>Synonymous with <code>map</code>.</dd>
<dt><code>referer</code></dt>
<dd>Equivalent to the URL of the referring document. Defaults
to <code>http://servername/</code> if no Referer: header was
present.</dd>
<dt><code>nocontent</code></dt>
<dd>Sends a status code of <code>204 No Content</code>,
telling the client to keep the same page displayed. Valid for
all but <code>base</code>.</dd>
<dt><code>error</code></dt>
<dd>Fails with a <code>500 Server Error</code>. Valid for all
but <code>base</code>, but sort of silly for anything but
<code>default</code>.</dd>
</dl>
<h3>Coordinates</h3>
<dl>
<dt><code>0,0 200,200</code></dt>
<dd>A coordinate consists of an <code>x</code> and a <code>y</code>
value separated by a comma. The coordinates are separated
from each other by whitespace. To accommodate the way Lynx
handles imagemaps, should a user select the coordinate
<code>0,0</code>, it is as if no coordinate had been
selected.</dd>
</dl>
<h3>Quoted Text</h3>
<dl>
<dt><code>"Menu Text"</code></dt>
<dd>After the value or after the coordinates, the line
optionally may contain text within double quotes. This string
is used as the text for the link if a menu is
generated:<br>
<code><a HREF="http://foo.com/">Menu
text</a></code><br>
If no quoted text is present, the name of the link will be
used as the text:<br>
<code><a
HREF="http://foo.com/">http://foo.com</a></code><br>
It is impossible to escape double quotes within this
text.</dd>
</dl>
<h2>Example Mapfile</h2>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
#Comments are printed in a 'formatted' or
'semiformatted' menu.<br>
#And can contain html tags. <hr><br>
base referer<br>
poly map "Could I have a menu, please?" 0,0 0,10 10,10
10,0<br>
rect .. 0,0 77,27 "the directory of the referer"<br>
circle http://www.inetnebr.com/lincoln/feedback/ 195,0
305,27<br>
rect another_file "in same directory as referer" 306,0
419,27<br>
point http://www.zyzzyva.com/ 100,100<br>
point http://www.tripod.com/ 200,200<br>
rect mailto:nate@tripod.com 100,150 200,0 "Bugs?"<br>
</code></td></tr></table></blockquote>
<h2>Referencing your mapfile</h2>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
<A HREF="/maps/imagemap1.map"><br>
<IMG ISMAP SRC="/images/imagemap1.gif"><br>
</A>
</code></td></tr></table></blockquote>
<hr/><h2><a name="ImapBase">ImapBase</a> <a name="imapbase">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Default base for imagemap files</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>ImapBase map|referer|<em>URL</em></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>ImapBase http://servername/</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host, directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>Indexes</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_imap</td></tr></table></td></tr></table>
<p>The <code class="directive">ImapBase</code> directive sets the default
<code>base</code> used in the imagemap files. Its value is
overridden by a <code>base</code> directive within the imagemap
file. If not present, the <code>base</code> defaults to
<code>http://servername/</code>.</p>
<hr/><h2><a name="ImapDefault">ImapDefault</a> <a name="imapdefault">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Default action when an imagemap is called with coordinates
that are not explicitly mapped</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>ImapDefault error|nocontent|map|referer|<em>URL</em></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>ImapDefault nocontent</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host, directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>Indexes</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_imap</td></tr></table></td></tr></table>
<p>The <code class="directive">ImapDefault</code> directive sets the default
<code>default</code> used in the imagemap files. Its value is
overridden by a <code>default</code> directive within the
imagemap file. If not present, the <code>default</code> action
is <code>nocontent</code>, which means that a <code>204 No
Content</code> is sent to the client. In this case, the client
should continue to display the original page.</p>
<hr/><h2><a name="ImapMenu">ImapMenu</a> <a name="imapmenu">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Action if no coordinates are given when calling
an imagemap</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>ImapMenu
none|formatted|semiformatted|unformatted</td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host, directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>Indexes</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_imap</td></tr></table></td></tr></table>
<p>The <code class="directive">ImapMenu</code> directive determines the
action taken if an imagemap file is called without valid
coordinates.</p>
<dl>
<dt><code>none</code></dt>
<dd>If ImapMenu is <code>none</code>, no menu is generated,
and the <code>default</code> action is performed.</dd>
<dt><code>formatted</code></dt>
<dd>A <code>formatted</code> menu is the simplest menu.
Comments in the imagemap file are ignored. A level one header
is printed, then an hrule, then the links each on a separate
line. The menu has a consistent, plain look close to that of
a directory listing.</dd>
<dt><code>semiformatted</code></dt>
<dd>In the <code>semiformatted</code> menu, comments are
printed where they occur in the imagemap file. Blank lines
are turned into HTML breaks. No header or hrule is printed,
but otherwise the menu is the same as a
<code>formatted</code> menu.</dd>
<dt><code>unformatted</code></dt>
<dd>Comments are printed, blank lines are ignored. Nothing is
printed that does not appear in the imagemap file. All breaks
and headers must be included as comments in the imagemap
file. This gives you the most flexibility over the appearance
of your menus, but requires you to treat your map files as
HTML instead of plaintext.</dd>
</dl>
<hr/></blockquote><h3 align="center">Apache HTTP Server Version 2.0</h3><a href="./"><img src="../images/index.gif" alt="Index"/></a><a href="../"><img src="../images/home.gif" alt="Home"/></a></body></html>
1.1 httpd-2.0/docs/manual/mod/mod_include.html.en
Index: mod_include.html.en
===================================================================
<html xmlns="http://www.w3.org/TR/xhtml1/strict"><head><!--
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
This file is generated from xml source: DO NOT EDIT
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
--><title>mod_include- Apache HTTP Server</title><link href="../style/manual.css" type="text/css" rel="stylesheet"/></head><body><blockquote><div align="center"><img src="../images/sub.gif" alt="[APACHE DOCUMENTATION]"/><h3>Apache HTTP Server Version 2.0</h3></div><h1 align="center">Apache Module mod_include</h1><table cellspacing="1" cellpadding="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td valign="top"><span class="help">Description:</span></td><td>Server-parsed html documents (Server Side Includes)</td></tr><tr><td><a href="module-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="module-dict.html#ModuleIdentifier" class="help">Module Identifier:</a></td><td>include_module</td></tr></table></td></tr></table><h2>Summary</h2>
<p>This module provides a filter which will process files
before they are sent to the client. The processing is
controlled by specially formated SGML comments, referred to as
<em>elements</em>. These elements allow conditional text, the
inclusion of other files or programs, as well as the setting and
printing of environment variables.</p>
<h2>Directives</h2><ul><li><a href="#ssiendtag">SSIEndTag</a></li><li><a href="#ssierrormsg">SSIErrorMsg</a></li><li><a href="#ssistarttag">SSIStartTag</a></li><li><a href="#ssitimeformat">SSITimeFormat</a></li><li><a href="#ssiundefinedecho">SSIUndefinedEcho</a></li><li><a href="#xbithack">XBitHack</a></li></ul><p><strong>See also </strong></p><ul><li><a href="core.html#options" class="directive"><code class="directive">Options</code></a></li><li><a href="core.html#setoutputfilter" class="directive"><code class="directive">SetOutputFilter</code></a></li><li><a href="core.html#acceptpathinfo" class="directive"><code class="directive">AcceptPathInfo</code></a></li></ul><h2><a name="enabling">Enabling Server-Side Includes</a></h2>
<p>Server Side Includes are implemented by the
<code>INCLUDES</code> <a href="../filter.html">filter</a>. If
documents containing server-side include directives are given
the extension .shtml, the following directives will make Apache
parse them and assign the resulting document the mime type of
<code>text/html</code>:</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
AddType text/html .shtml<br>
AddOutputFilter INCLUDES .shtml
</code></td></tr></table></blockquote>
<p>The following directive must be given for the directories
containing the shtml files (typically in a
<code><Directory></code> section, but this directive is
also valid .htaccess files if <code>AllowOverride
Options</code> is set):</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
Options +Includes
</code></td></tr></table></blockquote>
<p>For backwards compatibility, the <code>server-parsed</code>
<a href="../handler.html">handler</a> also activates the
INCLUDES filter. As well, Apache will activate the INCLUDES
filter for any document with mime type
<code>text/x-server-parsed-html</code> or
<code>text/x-server-parsed-html3</code> (and the resulting
output will have the mime type <code>text/html</code>).</p>
<p>For more information, see our <a href="../howto/ssi.html">Tutorial on Server Side
Includes</a>.</p>
<h2><a name="basic">Basic Elements</a></h2>
<p>The document is parsed as an HTML document, with special
commands embedded as SGML comments. A command has the syntax: </p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
<code><!--#</code><em>element attribute=value
attribute=value ...</em> <code>--></code>
</code></td></tr></table></blockquote>
<p>The value will often be enclosed in double quotes; many
commands only allow a single attribute-value pair. Note that
the comment terminator (<code>--></code>) should be preceded
by whitespace to ensure that it isn't considered part of an SSI
token. </p>
<p>The allowed elements are:</p>
<dl>
<dt><strong>config</strong></dt>
<dd>
This command controls various aspects of the parsing. The
valid attributes are:
<dl>
<dt><strong>errmsg</strong></dt>
<dd>The value is a message that is sent back to the
client if an error occurs whilst parsing the
document.</dd>
<dt><strong>sizefmt</strong></dt>
<dd>The value sets the format to be used which displaying
the size of a file. Valid values are <code>bytes</code>
for a count in bytes, or <code>abbrev</code> for a count
in Kb or Mb as appropriate.</dd>
<dt><strong>timefmt</strong></dt>
<dd>The value is a string to be used by the
<code>strftime(3)</code> library routine when printing
dates.</dd>
</dl>
</dd>
<dt><strong><a name="echo">echo</a></strong></dt>
<dd>
<p>This command prints one of the <a href="#includevars">include
variables</a>, defined below. If the variable is unset, it
is printed as <code>(none)</code>. Any dates printed are
subject to the currently configured <code>timefmt</code>.</p>
<p>Attributes:</p>
<dl>
<dt><strong>var</strong></dt>
<dd>The value is the name of the variable to print.</dd>
<dt><strong>encoding</strong></dt>
<dd>Specifies how Apache should encode special characters
contained in the variable before outputting them. If set
to "none", no encoding will be done. If set to "url",
then URL encoding (also known as %-encoding; this is
appropriate for use within URLs in links, etc.) will be
performed. At the start of an <code>echo</code> element,
the default is set to "entity", resulting in entity
encoding (which is appropriate in the context of a
block-level HTML element, eg. a paragraph of text). This
can be changed by adding an <code>encoding</code>
attribute, which will remain in effect until the next
<code>encoding</code> attribute is encountered or the
element ends, whichever comes first. Note that the
<code>encoding</code> attribute must <em>precede</em> the
corresponding <code>var</code> attribute to be effective,
and that only special characters as defined in the
ISO-8859-1 character encoding will be encoded. This
encoding process may not have the desired result if a
different character encoding is in use. Apache 1.3.12 and
above; previous versions do no encoding.</dd>
</dl>
</dd>
<dt><strong>exec</strong></dt>
<dd>
The exec command executes a given shell command or CGI
script. The IncludesNOEXEC <a href="core.html#option" class="directive"><code class="directive">Option</code></a> disables this command
completely. The valid attributes are:
<dl>
<dt><strong>cgi</strong></dt>
<dd>
The value specifies a (%-encoded) URL relative path to
the CGI script. If the path does not begin with a (/),
then it is taken to be relative to the current
document. The document referenced by this path is
invoked as a CGI script, even if the server would not
normally recognize it as such. However, the directory
containing the script must be enabled for CGI scripts
(with <a href="mod_alias.html#scriptalias" class="directive"><code class="directive">ScriptAlias</code></a>
or the ExecCGI <a href="core.html#option" class="directive"><code class="directive">Option</code></a>).
<p>The CGI script is given the PATH_INFO and query
string (QUERY_STRING) of the original request from the
client; these cannot be specified in the URL path. The
include variables will be available to the script in
addition to the standard <a href="mod_cgi.html">CGI</a>
environment.</p>
<p>For example:</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code><!--#exec cgi="/cgi-bin/example.cgi" --></code></td></tr></table></blockquote>
<p>If the script returns a Location: header instead of
output, then this will be translated into an HTML
anchor.</p>
<p>The <code><a href="#includevirtual">include
virtual</a></code> element should be
used in preference to <code>exec cgi</code>. In particular,
if you need to pass additional arguments to a CGI program,
using the query string, this cannot be done with <code>exec
cgi</code>, but can be done with <code>include
virtual</code>, as shown here:</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
<!--#include virtual="/cgi-bin/example.cgi?argument=value" -->
</code></td></tr></table></blockquote>
</dd>
<dt><strong>cmd</strong></dt>
<dd>
<p>The server will execute the given string using
<code>/bin/sh</code>. The <a href="#includevars">include variables</a> are available
to the command, in addition to the usual set of CGI
variables.</p>
<p>The use of <code><a href="#includevirtual">#include
virtual</a></code> is almost always
prefered to using either <code>#exec cgi</code> or <code>#exec
cmd</code>. The former (<code>#include virtual</code>) used the
standard Apache sub-request mechanism to include files or
scripts. It is much better tested and maintained.</p>
<p>In addition, on some platforms, like Win32, and on unix
when using suexec, you cannot pass arguments to a command in
an <code>exec</code> directive, or otherwise include spaces in
the command. Thus, while the following will work under a
non-suexec configuration on unix, it will not produce the
desired result under Win32, or when running suexec:</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
<!--#exec cmd="perl /path/to/perlscript arg1 arg2" -->
</code></td></tr></table></blockquote>
</dd>
</dl>
</dd>
<dt><strong>fsize</strong></dt>
<dd>
This command prints the size of the specified file, subject
to the <code>sizefmt</code> format specification.
Attributes:
<dl>
<dt><strong>file</strong></dt>
<dd>The value is a path relative to the directory
containing the current document being parsed.</dd>
<dt><strong>virtual</strong></dt>
<dd>The value is a (%-encoded) URL-path relative to the
current document being parsed. If it does not begin with
a slash (/) then it is taken to be relative to the
current document.</dd>
</dl>
</dd>
<dt><strong>flastmod</strong></dt>
<dd>This command prints the last modification date of the
specified file, subject to the <code>timefmt</code> format
specification. The attributes are the same as for the
<code>fsize</code> command.</dd>
<dt><strong>include</strong></dt>
<dd>
This command inserts the text of another document or file
into the parsed file. Any included file is subject to the
usual access control. If the directory containing the
parsed file has the <a href="core.html#options">Option</a>
IncludesNOEXEC set, and the including the document would
cause a program to be executed, then it will not be
included; this prevents the execution of CGI scripts.
Otherwise CGI scripts are invoked as normal using the
complete URL given in the command, including any query
string.
<p>An attribute defines the location of the document; the
inclusion is done for each attribute given to the include
command. The valid attributes are:</p>
<dl>
<dt><strong>file</strong></dt>
<dd>The value is a path relative to the directory
containing the current document being parsed. It cannot
contain <code>../</code>, nor can it be an absolute path.
Therefore, you cannot include files that are outside of the
document root, or above the current document in the directory
structure.
The <code>virtual</code> attribute should always be used
in preference to this one.</dd>
<dt><strong><a name="includevirtual">virtual</a></strong></dt>
<dd>
<p>The value is a (%-encoded) URL relative to the
current document being parsed. The URL cannot contain a
scheme or hostname, only a path and an optional query
string. If it does not begin with a slash (/) then it is
taken to be relative to the current document.</p>
<p>A URL is constructed from the attribute, and the output the
server would return if the URL were accessed by the client
is included in the parsed output. Thus included files can
be nested.</p>
<p>If the specified URL is a CGI program, the program will
be executed and its output inserted in place of the directive
in the parsed file. You may include a query string in a CGI
url:</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
<!--#include virtual="/cgi-bin/example.cgi?argument=value" -->
</code></td></tr></table></blockquote>
<p><code>include virtual</code> should be used in preference
to <code>exec cgi</code> to include the output of CGI
programs into an HTML document.</p>
</dd>
</dl>
</dd>
<dt><strong>printenv</strong></dt>
<dd>
<p>This prints out a listing of all existing variables and
their values. Starting with Apache 1.3.12, special characters
are entity encoded (see the <a href="#echo"><code>echo</code></a> element for details)
before being output. There are no attributes.</p>
<p>For example:</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
<!--#printenv -->
</code></td></tr></table></blockquote>
<p>The <strong>printenv</strong> element is available only in
Apache 1.2 and above.</p>
</dd>
<dt><strong>set</strong></dt>
<dd>
This sets the value of a variable. Attributes:
<dl>
<dt><strong>var</strong></dt>
<dd>The name of the variable to set.</dd>
<dt><strong>value</strong></dt>
<dd>The value to give a variable.</dd>
</dl>
<p>For example:</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
<!--#set var="category" value="help" -->
</code></td></tr></table></blockquote>
<p>The <strong>set</strong> element is available only in
Apache 1.2 and above.</p>
</dd>
</dl>
<h2><a name="includevars">Include Variables</a></h2>
<p>In addition to the variables in the standard CGI environment,
these are available for the <code>echo</code> command, for
<code>if</code> and <code>elif</code>, and to any program
invoked by the document.</p>
<dl>
<dt>DATE_GMT</dt>
<dd>The current date in Greenwich Mean Time.</dd>
<dt>DATE_LOCAL</dt>
<dd>The current date in the local time zone.</dd>
<dt>DOCUMENT_NAME</dt>
<dd>The filename (excluding directories) of the document
requested by the user.</dd>
<dt>DOCUMENT_URI</dt>
<dd>The (%-decoded) URL path of the document requested by the
user. Note that in the case of nested include files, this is
<em>not</em> then URL for the current document.</dd>
<dt>LAST_MODIFIED</dt>
<dd>The last modification date of the document requested by
the user.</dd>
</dl>
<h2>Variable Substitution</h2>
<p>Variable substitution is done within quoted strings in most
cases where they may reasonably occur as an argument to an SSI
directive. This includes the <code>config</code>,
<code>exec</code>, <code>flastmod</code>, <code>fsize</code>,
<code>include</code>, <code>echo</code>, and <code>set</code>
directives, as well
as the arguments to conditional operators. You can insert a
literal dollar sign into the string using backslash
quoting:</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
<!--#if expr="$a = \$test" -->
</code></td></tr></table></blockquote>
<p>If a variable reference needs to be substituted in the
middle of a character sequence that might otherwise be
considered a valid identifier in its own right, it can be
disambiguated by enclosing the reference in braces,
<em>a la</em> shell substitution:</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
<!--#set var="Zed" value="${REMOTE_HOST}_${REQUEST_METHOD}" -->
</code></td></tr></table></blockquote>
<p>This will result in the <code>Zed</code> variable being set
to "<code>X_Y</code>" if <code>REMOTE_HOST</code> is
"<code>X</code>" and <code>REQUEST_METHOD</code> is
"<code>Y</code>".</p>
<p>EXAMPLE: the below example will print "in foo" if the
DOCUMENT_URI is /foo/file.html, "in bar" if it is
/bar/file.html and "in neither" otherwise:</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
<!--#if expr="\"$DOCUMENT_URI\" = \"/foo/file.html\"" --><br>
in foo<br>
<!--#elif expr="\"$DOCUMENT_URI\" = \"/bar/file.html\"" --><br>
in bar<br>
<!--#else --><br>
in neither<br>
<!--#endif -->
</code></td></tr></table></blockquote>
<h2><a name="flowctrl">Flow Control Elements</a></h2>
<p>These are available in Apache 1.2 and above. The basic flow
control elements are:</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
<!--#if expr="<em>test_condition</em>" --><br>
<!--#elif expr="<em>test_condition</em>" --><br>
<!--#else --><br>
<!--#endif -->
</code></td></tr></table></blockquote>
<p>The <strong><code>if</code></strong> element works like an
if statement in a programming language. The test condition is
evaluated and if the result is true, then the text until the
next <strong><code>elif</code></strong>,
<strong><code>else</code></strong>. or
<strong><code>endif</code></strong> element is included in the
output stream.</p>
<p>The <strong><code>elif</code></strong> or
<strong><code>else</code></strong> statements are be used the
put text into the output stream if the original test_condition
was false. These elements are optional.</p>
<p>The <strong><code>endif</code></strong> element ends the
<strong><code>if</code></strong> element and is required.</p>
<p><em>test_condition</em> is one of the following:</p>
<dl>
<dt><em>string</em></dt>
<dd>true if <em>string</em> is not empty</dd>
<dt><em>string1</em> = <em>string2</em><br>
<em>string1</em> != <em>string2</em><br>
<em>string1</em> < <em>string2</em><br>
<em>string1</em> <= <em>string2</em><br>
<em>string1</em> > <em>string2</em><br>
<em>string1</em> >= <em>string2</em></dt>
<dd>Compare string1 with string 2. If string2 has the form
<em>/string/</em> then it is compared as a regular
expression. Regular expressions have the same syntax as those
found in the Unix <code>egrep</code> command.</dd>
<dt>( <em>test_condition</em> )</dt>
<dd>true if <em>test_condition</em> is true</dd>
<dt>! <em>test_condition</em></dt>
<dd>true if <em>test_condition</em> is false</dd>
<dt><em>test_condition1</em> &&
<em>test_condition2</em></dt>
<dd>true if both <em>test_condition1</em> and
<em>test_condition2</em> are true</dd>
<dt><em>test_condition1</em> || <em>test_condition2</em></dt>
<dd>true if either <em>test_condition1</em> or
<em>test_condition2</em> is true</dd>
</dl>
<p>"<em>=</em>" and "<em>!=</em>" bind more tightly than
"<em>&&</em>" and "<em>||</em>". "<em>!</em>" binds
most tightly. Thus, the following are equivalent:</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
<!--#if expr="$a = test1 && $b = test2" --><br>
<!--#if expr="($a = test1) && ($b = test2)" -->
</code></td></tr></table></blockquote>
<p>Anything that's not recognized as a variable or an operator
is treated as a string. Strings can also be quoted:
<em>'string'</em>. Unquoted strings can't contain whitespace
(blanks and tabs) because it is used to separate tokens such as
variables. If multiple strings are found in a row, they are
concatenated using blanks. So,</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
<pre><em>string1 string2</em> results in <em>string1 string2</em></pre>
<pre><em>'string1 string2'</em> results in <em>string1 string2</em></pre>
</code></td></tr></table></blockquote>
<h2>Using Server Side Includes for ErrorDocuments</h2>
<p>There is <a href="../misc/custom_errordocs.html">a document</a>
which describes how to use the features of mod_include to offer
internationalized customized server error documents.</p>
<h2>PATH_INFO with Server Side Includes</h2>
<p>Files processed for server-side includes no longer accept
requests with PATH_INFO (trailing pathname information) by
default. You can use the <a href="core.html#acceptpathinfo" class="directive"><code class="directive">AcceptPathInfo</code></a> directive to
configure the server to accept requests with PATH_INFO.</p>
<hr/><h2><a name="SSIEndTag">SSIEndTag</a> <a name="ssiendtag">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Changes the string that mod_include looks for to end an
include command.</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>SSIEndTag <em>tag</em></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>SSIEndTag "-->"</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>FileInfo</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_include</td></tr><tr><td align="left" valign="top"><a href="directive-dict.html#Compatibility" class="help">Compatibility:</a></td><td>Available in version 2.0.30 and later.
</td></tr></table></td></tr></table>
<p>This directive changes the string that mod_include looks for
to mark the end of a include command.</p>
<p><strong>See also </strong></p><ul><li><code class="directive">SSIStartTag</code></li></ul><hr/><h2><a name="SSIErrorMsg">SSIErrorMsg</a> <a name="ssierrormsg">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Changes the error message displayed when there is an error</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>SSIErrorMsg <em>message</em></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>SSIErrorMsg
"[an error occurred while processing this directive]"</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host, directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td/></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_include</td></tr><tr><td align="left" valign="top"><a href="directive-dict.html#Compatibility" class="help">Compatibility:</a></td><td>Available in version 2.0.30 and later.</td></tr></table></td></tr></table>
<p>The SSIErrorMsg directive changes the error message displayed
when mod_include encounters an error. For production servers you
may consider changing the default error message to
<code>"<!-- Error -->"</code> so that the message
is not presented to the user.
</p>
<p>This directive has the same effect as the <code><!--#config
errmsg=<em>message</em> --></code> element.</p>
<hr/><h2><a name="SSIStartTag">SSIStartTag</a> <a name="ssistarttag">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td/></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>Changes the string that mod_include looks for to start an
include element</td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>SSIStartTag "<!--"</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td/></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_include</td></tr><tr><td align="left" valign="top"><a href="directive-dict.html#Compatibility" class="help">Compatibility:</a></td><td>Available in version 2.0.30 and later.</td></tr></table></td></tr></table>
<p>This directive changes the string that mod_include looks for
to mark an include element to process.</p>
<p>You may want to use this option if have 2 servers parsing the
output of a file each processing different commands (possibly at
different times).</p>
<p><strong>See also </strong></p><ul><li><code class="directive">SSIEndTag</code></li></ul><hr/><h2><a name="SSITimeFormat">SSITimeFormat</a> <a name="ssitimeformat">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Configures the format in which date strings are
displayed</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>SSITimeFormat <em>formatstring</em></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>SSITimeFormat "%A, %d-%b-%Y %H:%M:%S %Z"</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host, directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td/></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_include</td></tr><tr><td align="left" valign="top"><a href="directive-dict.html#Compatibility" class="help">Compatibility:</a></td><td>Available in version 2.0.30 and later.</td></tr></table></td></tr></table>
<p>This directive changes the format in which date strings are displayed
when echoing DATE environment variables. The <em>formatstring</em>
is as in strftime(3) from the C standard library.</p>
<p>This directive has the same effect as the <code><!--#config
timefmt=<em>formatstring</em> --></code> element.</p>
<hr/><h2><a name="SSIUndefinedEcho">SSIUndefinedEcho</a> <a name="ssiundefinedecho">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Changes the string that mod_include displays when
a variable isn't set.</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>SSIUndefinedEcho <em>tag</em></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>SSIUndefinedEcho "<!-- undef -->"</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>FileInfo</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_include</td></tr><tr><td align="left" valign="top"><a href="directive-dict.html#Compatibility" class="help">Compatibility:</a></td><td>Available in version 2.0.34 and later.
</td></tr></table></td></tr></table>
<p>This directive changes the string that mod_include displays
when a variable is not set and "echoed".</p>
<hr/><h2><a name="XBitHack">XBitHack</a> <a name="xbithack">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Parse SSI directives in files with the execute
bit set</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>XBitHack on|off|full</td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>XBitHack off</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host, directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>Options</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_include</td></tr><tr><td align="left" valign="top"><a href="directive-dict.html#Compatibility" class="help">Compatibility:</a></td><td/></tr></table></td></tr></table>
<p>The XBitHack directives controls the parsing of ordinary
html documents. This directive only affects files associated
with the MIME type <code>text/html</code>. XBitHack can take on
the following values:</p>
<dl>
<dt>off</dt>
<dd>No special treatment of executable files.</dd>
<dt>on</dt>
<dd>Any text/html file that has the user-execute bit set will
be treated as a server-parsed html document.</dd>
<dt>full</dt>
<dd>
As for <code>on</code> but also test the group-execute bit.
If it is set, then set the Last-modified date of the
returned file to be the last modified time of the file. If
it is not set, then no last-modified date is sent. Setting
this bit allows clients and proxies to cache the result of
the request.
<blockquote><table><tr><td bgcolor="#e0e5f5"><strong>Note:</strong> you would not want to use the full
option, unless you assure the group-execute bit is unset for
every SSI script which might <code>#include</code> a CGI
or otherwise produces different output on each hit (or could
potentially change on subsequent requests).</td></tr></table></blockquote>
</dd>
</dl>
<hr/></blockquote><h3 align="center">Apache HTTP Server Version 2.0</h3><a href="./"><img src="../images/index.gif" alt="Index"/></a><a href="../"><img src="../images/home.gif" alt="Home"/></a></body></html>
1.1 httpd-2.0/docs/manual/mod/mod_info.html.en
Index: mod_info.html.en
===================================================================
<html xmlns="http://www.w3.org/TR/xhtml1/strict"><head><!--
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
This file is generated from xml source: DO NOT EDIT
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
--><title>mod_info- Apache HTTP Server</title><link href="../style/manual.css" type="text/css" rel="stylesheet"/></head><body><blockquote><div align="center"><img src="../images/sub.gif" alt="[APACHE DOCUMENTATION]"/><h3>Apache HTTP Server Version 2.0</h3></div><h1 align="center">Apache Module mod_info</h1><table cellspacing="1" cellpadding="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td valign="top"><span class="help">Description:</span></td><td>Provides a comprehensive overview of the server
configuration</td></tr><tr><td><a href="module-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="module-dict.html#ModuleIdentifier" class="help">Module Identifier:</a></td><td>info_module</td></tr></table></td></tr></table><h2>Summary</h2>
<p>To configure <code><a href="mod_info.html">mod_info</a></code>, add the following to your
<code>httpd.conf</code> file.</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
<Location /server-info><br>
SetHandler server-info<br>
</Location><br>
</code></td></tr></table></blockquote>
<p>You may wish to add a
<a href="core.html#<limit>" class="directive"><code class="directive"><Limit></code></a>
clause inside the
<a href="core.html#<location>" class="directive"><code class="directive"><location></code></a>
directive to limit access to your server configuration
information.</p>
<p>Once configured, the server information is obtained by
accessing <code>http://your.host.dom/server-info</code></p>
<blockquote><table><tr><td bgcolor="#e0e5f5">
Note that the configuration files are read by the
module at run-time, and therefore the display may
<em>not</em> reflect the running server's active
configuration if the files have been changed since the server
was last reloaded. Also, the configuration files must be
readable by the user as which the server is running (see the
<a href="mpm_common.html#user" class="directive"><code class="directive">User</code></a> directive), or
else the directive settings will not be listed.
<p>It should also be noted that if
<code><a href="mod_info.html">mod_info</a></code> is compiled into the server, its
handler capability is available in <em>all</em> configuration
files, including <em>per</em>-directory files (<em>e.g.</em>,
<code>.htaccess</code>). This may have security-related
ramifications for your site.</p>
</td></tr></table></blockquote>
<h2>Directives</h2><ul><li><a href="#addmoduleinfo">AddModuleInfo</a></li></ul><hr/><h2><a name="AddModuleInfo">AddModuleInfo</a> <a name="addmoduleinfo">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Allows additional information to be added to the module
information displayed by the server-info handler</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>AddModuleInfo <em>module-name string</em></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual
host</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_info</td></tr><tr><td align="left" valign="top"><a href="directive-dict.html#Compatibility" class="help">Compatibility:</a></td><td>Apache 1.3 and above</td></tr></table></td></tr></table>
<p>This allows the content of <em>string</em> to be shown as
HTML interpreted, <strong>Additional Information</strong> for
the module <em>module-name</em>. Example:</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
AddModuleInfo mod_auth.c 'See <A HREF="http://www.apache.org/docs/mod/mod_auth.html">http://www.apache.org/docs/mod/mod_auth.html</A>'
</code></td></tr></table></blockquote>
<hr/></blockquote><h3 align="center">Apache HTTP Server Version 2.0</h3><a href="./"><img src="../images/index.gif" alt="Index"/></a><a href="../"><img src="../images/home.gif" alt="Home"/></a></body></html>
1.1 httpd-2.0/docs/manual/mod/mod_isapi.html.en
Index: mod_isapi.html.en
===================================================================
<html xmlns="http://www.w3.org/TR/xhtml1/strict"><head><!--
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
This file is generated from xml source: DO NOT EDIT
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
--><title>mod_isapi- Apache HTTP Server</title><link href="../style/manual.css" type="text/css" rel="stylesheet"/></head><body><blockquote><div align="center"><img src="../images/sub.gif" alt="[APACHE DOCUMENTATION]"/><h3>Apache HTTP Server Version 2.0</h3></div><h1 align="center">Apache Module mod_isapi</h1><table cellspacing="1" cellpadding="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td valign="top"><span class="help">Description:</span></td><td>ISAPI Extensions within Apache for Windows</td></tr><tr><td><a href="module-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="module-dict.html#ModuleIdentifier" class="help">Module Identifier:</a></td><td>isapi_module</td></tr><tr><td align="left" valign="top"><a href="module-dict.html#Compatibility" class="help">Compatibility:</a></td><td><compatibility>Win32 only</compatibility></td></tr></table></td></tr></table><h2>Summary</h2>
<p>This module implements the Internet Server extension API. It
allows Internet Server extensions (<em>e.g.</em> ISAPI .dll
modules) to be served by Apache for Windows, subject to the
noted restrictions.</p>
<p>ISAPI extension modules (.dll files) are written by third
parties. The Apache Group does not author these modules, so we
provide no support for them. Please contact the ISAPI's author
directly if you are experiencing problems running their ISAPI
extention. <strong>Please <em>do not</em> post such problems to
Apache's lists or bug reporting pages.</strong></p>
<h2>Directives</h2><ul><li><a href="#isapiappendlogtoerrors">ISAPIAppendLogToErrors</a></li><li><a href="#isapiappendlogtoquery">ISAPIAppendLogToQuery</a></li><li><a href="#isapifilechache">ISAPIFileChache</a></li><li><a href="#isapilognotsupported">ISAPILogNotSupported</a></li><li><a href="#isapireadaheadbuffer">ISAPIReadAheadBuffer</a></li></ul><h2>Usage</h2> <p>In the server configuration file, use
the <a href="mod_mime.html#addhandler" class="directive"><code class="directive">AddHandler</code></a> directive to
associate ISAPI files with the <code>isapi-isa</code> handler, and map
it to the with their file extensions. To enable any .dll file to be
processed as an ISAPI extention, edit the httpd.conf file and add the
following line:</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
AddHandler isapi-isa .dll
</code></td></tr></table></blockquote>
<p>There is no capability within the Apache server to leave a
requested module loaded. However, you may preload and keep a
specific module loaded by using the following syntax in your
httpd.conf:</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
ISAPICacheFile c:/WebWork/Scripts/ISAPI/mytest.dll
</code></td></tr></table></blockquote>
<p>Whether or not you have preloaded an ISAPI extension, all
ISAPI extensions are governed by the same permissions and
restrictions as CGI scripts. That is, <code>Options
ExecCGI</code> must be set for the directory that contains the
ISAPI .dll file.</p>
<p>Review the <a href="#notes">Additional Notes</a> and the <a href="#journal">Programmer's Journal</a> for additional details
and clarification of the specific ISAPI support offered by
mod_isapi.</p>
<h2><a name="notes">Additional Notes</a></h2>
<p>Apache's ISAPI implementation conforms to all of the ISAPI
2.0 specification, except for some "Microsoft-specific"
extensions dealing with asynchronous I/O. Apache's I/O model
does not allow asynchronous reading and writing in a manner
that the ISAPI could access. If an ISA tries to access
unsupported features, including async I/O, a message is placed
in the error log to help with debugging. Since these messages
can become a flood, the directive <code>ISAPILogNotSupported
Off</code> exists to quiet this noise.</p>
<p>Some servers, like Microsoft IIS, load the ISAPI extension
into the server and keep it loaded until memory usage is too
high, or unless configuration options are specified. Apache
currently loads and unloads the ISAPI extension each time it is
requested, unless the ISAPICacheFile directive is specified.
This is inefficient, but Apache's memory model makes this the
most effective method. Many ISAPI modules are subtly
incompatible with the Apache server, and unloading these
modules helps to ensure the stability of the server.</p>
<p>Also, remember that while Apache supports ISAPI Extensions,
it <strong>does not support ISAPI Filters.</strong> Support for
filters may be added at a later date, but no support is planned
at this time.</p>
<h2><a name="journal">Programmer's Journal</a></h2>
<p>If you are programming Apache 2.0 <code><a href="mod_isapi.html">mod_isapi</a></code>
modules, you must limit your calls to ServerSupportFunction to the
following directives:</p>
<dl>
<dt>HSE_REQ_SEND_URL_REDIRECT_RESP</dt>
<dd>Redirect the user to another location.<br>
This must be a fully qualified URL (e.g.
http://server/location).</dd>
<dt>HSE_REQ_SEND_URL</dt>
<dd>Redirect the user to another location.<br>
This cannot be a fully qualified URL, you are not allowed to
pass the protocol or a server name (e.g. simply
/location).<br>
This redirection is handled by the server, not the
browser.<br>
<strong>Warning:</strong> in their recent documentation,
Microsoft appears to have abandoned the distinction between
the two HSE_REQ_SEND_URL functions. Apache continues to treat
them as two distinct functions with different requirements
and behaviors.</dd>
<dt>HSE_REQ_SEND_RESPONSE_HEADER</dt>
<dd>Apache accepts a response body following the header if it
follows the blank line (two consecutive newlines) in the
headers string argument. This body cannot contain NULLs,
since the headers argument is NULL terminated.</dd>
<dt>HSE_REQ_DONE_WITH_SESSION</dt>
<dd>Apache considers this a no-op, since the session will be
finished when the ISAPI returns from processing.</dd>
<dt>HSE_REQ_MAP_URL_TO_PATH</dt>
<dd>Apache will translate a virtual name to a physical
name.</dd>
<dt>HSE_APPEND_LOG_PARAMETER</dt>
<dd>
This logged message may be captured in any of the following
logs:
<ul>
<li>in the \"%{isapi-parameter}n\" component in a
CustomLog directive</li>
<li>in the %q log component with the
ISAPIAppendLogToQuery On directive</li>
<li>in the error log with the ISAPIAppendLogToErrors On
directive</li>
</ul>
The first option, the %{isapi-parameter}n component, is
always available and prefered.
</dd>
<dt>HSE_REQ_IS_KEEP_CONN</dt>
<dd>Will return the negotiated Keep-Alive status.</dd>
<dt>HSE_REQ_SEND_RESPONSE_HEADER_EX</dt>
<dd>Will behave as documented, although the fKeepConn flag is
ignored.</dd>
<dt>HSE_REQ_IS_CONNECTED</dt>
<dd>Will report false if the request has been aborted.</dd>
</dl>
<p>Apache returns FALSE to any unsupported call to
ServerSupportFunction, and sets the GetLastError value to
ERROR_INVALID_PARAMETER.</p>
<p>ReadClient retrieves the request body exceeding the initial
buffer (defined by ISAPIReadAheadBuffer). Based on the
ISAPIReadAheadBuffer setting (number of bytes to buffer prior
to calling the ISAPI handler) shorter requests are sent
complete to the extension when it is invoked. If the request is
longer, the ISAPI extension must use ReadClient to retrieve the
remaining request body.</p>
<p>WriteClient is supported, but only with the HSE_IO_SYNC flag
or no option flag (value of 0). Any other WriteClient request
will be rejected with a return value of FALSE, and a
GetLastError value of ERROR_INVALID_PARAMETER.</p>
<p>GetServerVariable is supported, although extended server
variables do not exist (as defined by other servers.) All the
usual Apache CGI environment variables are available from
GetServerVariable, as well as the ALL_HTTP and ALL_RAW
values.</p>
<p>Apache 2.0 <code><a href="mod_isapi.html">mod_isapi</a></code> supports additional
features introduced in later versions of the ISAPI specification,
as well as limited emulation of async I/O and the TransmitFile
semantics. Apache also supports preloading ISAPI .dlls for
performance, neither of which were not available under Apache 1.3
mod_isapi.</p>
<hr/><h2><a name="ISAPIAppendLogToErrors">ISAPIAppendLogToErrors</a> <a name="isapiappendlogtoerrors">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Record HSE_APPEND_LOG_PARAMETER requests from ISAPI
extensions to the error log</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>ISAPIAppendLogToErrors on|off</td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>ISAPIAppendLogToErrors off</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_isapi</td></tr></table></td></tr></table>
<p>Record HSE_APPEND_LOG_PARAMETER requests from ISAPI
extensions to the server error log.</p>
<hr/><h2><a name="ISAPIAppendLogToQuery">ISAPIAppendLogToQuery</a> <a name="isapiappendlogtoquery">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Record HSE_APPEND_LOG_PARAMETER requests from ISAPI
extensions to the query field</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>ISAPIAppendLogToQuery on|off</td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>ISAPIAppendLogToQuery off</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_isapi</td></tr></table></td></tr></table>
<p>Record HSE_APPEND_LOG_PARAMETER requests from ISAPI
extensions to the query field (appended to the CustomLog %q
component).</p>
<hr/><h2><a name="ISAPIFileChache">ISAPIFileChache</a> <a name="isapifilechache">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>ISAPI .dll files to be loaded at startup</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>ISAPIFileCache <em>file-path</em> [<em>file-path</em>] ...</td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_isapi</td></tr></table></td></tr></table>
<p>Specifies a space-separated list of file names to be loaded
when the Apache server is launched, and remain loaded until the
server is shut down. This directive may be repeated for every
ISAPI .dll file desired. The full path name of each file should
be specified.</p>
<hr/><h2><a name="ISAPILogNotSupported">ISAPILogNotSupported</a> <a name="isapilognotsupported">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Log unsupported feature requests from ISAPI
extensions</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>ISAPILogNotSupported on|off</td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>ISAPILogNotSupported on</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_isapi</td></tr></table></td></tr></table>
<p>Logs all requests for unsupported features from ISAPI
extensions in the server error log. While this should be turned
off once all desired ISAPI modules are functioning, it defaults
to on to help administrators track down problems.</p>
<hr/><h2><a name="ISAPIReadAheadBuffer">ISAPIReadAheadBuffer</a> <a name="isapireadaheadbuffer">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Size of the Read Ahead Buffer sent to ISAPI
extensions</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>ISAPIReadAheadBuffer <em>size</em></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>ISAPIReadAheadBuffer 49152</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_isapi</td></tr></table></td></tr></table>
<p>Defines the maximum size of the Read Ahead Buffer sent to
ISAPI extensions when they are initially invoked. All remaining
data must be retrieved using the ReadClient callback; some
ISAPI extensions may not support the ReadClient function. Refer
questions to the ISAPI extension's author.</p>
<hr/></blockquote><h3 align="center">Apache HTTP Server Version 2.0</h3><a href="./"><img src="../images/index.gif" alt="Index"/></a><a href="../"><img src="../images/home.gif" alt="Home"/></a></body></html>
1.1 httpd-2.0/docs/manual/mod/mod_log_config.html.en
Index: mod_log_config.html.en
===================================================================
<html xmlns="http://www.w3.org/TR/xhtml1/strict"><head><!--
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
This file is generated from xml source: DO NOT EDIT
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
--><title>mod_log_config- Apache HTTP Server</title><link href="../style/manual.css" type="text/css" rel="stylesheet"/></head><body><blockquote><div align="center"><img src="../images/sub.gif" alt="[APACHE DOCUMENTATION]"/><h3>Apache HTTP Server Version 2.0</h3></div><h1 align="center">Apache Module mod_log_config</h1><table cellspacing="1" cellpadding="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td valign="top"><span class="help">Description:</span></td><td>Logging of the requests made to the server</td></tr><tr><td><a href="module-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="module-dict.html#ModuleIdentifier" class="help">Module Identifier:</a></td><td>log_config_module</td></tr></table></td></tr></table><h2>Summary</h2>
<p>This module provides for flexible logging of client
requests. Logs are written in a customizable format, and may be
written directly to a file, or to an external program.
Conditional logging is provided so that individual requests may
be included or excluded from the logs based on characteristics
of the request.</p>
<p>Three directives are provided by this module:
<code>TransferLog</code> to create a log file,
<code>LogFormat</code> to set a custom format, and
<code>CustomLog</code> to define a log file and format in one
step. The <code>TransferLog</code> and <code>CustomLog</code>
directives can be used multiple times in each server to cause
each request to be logged to multiple files.</p>
<h2>Directives</h2><ul><li><a href="#cookielog">CookieLog</a></li><li><a href="#customlog">CustomLog</a></li><li><a href="#logformat">LogFormat</a></li><li><a href="#transferlog">TransferLog</a></li></ul><p><strong>See also </strong></p><ul><li><a href="../logs.html">Apache Log Files</a></li></ul><h2><a name="formats">Custom Log Formats</a></h2>
<p>The format argument to the <code>LogFormat</code> and
<code>CustomLog</code> directives is a string. This string is
logged to the log file for each request. It can contain literal
characters copied into the log files and the c-type control
characters "\n" and "\t" to represent new-lines and tabs.
Literal quotes and back-slashes should be escaped with
back-slashes.</p>
<p>The characteristics of the request itself are logged by
placing "%" directives in the format string, which are replaced
in the log file by the values as follows:</p>
<table>
<tr><td>%...a:</td>
<td>Remote IP-address</td></tr>
<tr><td>%...A:</td>
<td>Local IP-address</td></tr>
<tr><td>%...B:</td>
<td>Bytes sent, excluding HTTP headers.</td></tr>
<tr><td>%...b:</td>
<td>Bytes sent, excluding HTTP headers. In CLF format
i.e. a '-' rather than a 0 when no bytes are sent.</td></tr>
<tr><td>%...{Foobar}C:</td>
<td>The contents of cookie "Foobar" in the request sent to the server.</td></tr>
<tr><td>%...D:</td>
<td>The time taken to serve the request, in microseconds.</td></tr>
<tr><td>%...{FOOBAR}e:</td>
<td>The contents of the environment variable FOOBAR</td></tr>
<tr><td>%...f:</td>
<td>Filename</td></tr>
<tr><td>%...h:</td>
<td>Remote host</td></tr>
<tr><td>%...H</td>
<td>The request protocol</td></tr>
<tr><td>%...{Foobar}i:</td>
<td>The contents of Foobar: header line(s) in the request
sent to the server.</td></tr>
<tr><td>%...l:</td>
<td>Remote logname (from identd, if supplied)</td></tr>
<tr><td>%...m:</td>
<td>The request method</td></tr>
<tr><td>%...{Foobar}n:</td>
<td>The contents of note "Foobar" from another module.</td></tr>
<tr><td>%...{Foobar}o:</td>
<td>The contents of Foobar: header line(s) in the reply.</td></tr>
<tr><td>%...p:</td>
<td>The canonical Port of the server serving the request</td></tr>
<tr><td>%...P:</td>
<td>The process ID of the child that serviced the request.</td></tr>
<tr><td>%...q:</td>
<td>The query string (prepended with a ? if a query string exists,
otherwise an empty string)</td></tr>
<tr><td>%...r:</td>
<td>First line of request</td></tr>
<tr><td>%...s:</td>
<td>Status. For requests that got internally redirected, this is
the status of the *original* request --- %...>s for the last.</td></tr>
<tr><td>%...t:</td>
<td>Time, in common log format time format (standard english format)</td></tr>
<tr><td>%...{format}t:</td>
<td>The time, in the form given by format, which should
be in strftime(3) format. (potentially localized)</td></tr>
<tr><td>%...T:</td>
<td>The time taken to serve the request, in seconds.</td></tr>
<tr><td>%...u:</td>
<td>Remote user (from auth; may be bogus if return status (%s) is 401)</td></tr>
<tr><td>%...U:</td>
<td>The URL path requested, not including any query string.</td></tr>
<tr><td>%...v:</td>
<td>The canonical ServerName of the server serving the request.</td></tr>
<tr><td>%...V:</td>
<td>The server name according to the UseCanonicalName setting.</td></tr>
<tr><td>%...X:</td>
<td>Connection status when response is completed.
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
'X' = connection aborted before the response completed.<br>
'+' = connection may be kept alive after the response is sent.<br>
'-' = connection will be closed after the response is sent.
</code></td></tr></table></blockquote>
<blockquote><table><tr><td bgcolor="#e0e5f5">(This directive was %...c in late versions of Apache 1.3, but
this conflicted with the historical ssl %...{var}c syntax.)</td></tr></table></blockquote>
</td></tr>
</table>
<p>The "..." can be nothing at all (<em>e.g.</em>, <code>"%h %u
%r %s %b"</code>), or it can indicate conditions for inclusion
of the item (which will cause it to be replaced with "-" if the
condition is not met). The forms of condition are a list of
HTTP status codes, which may or may not be preceded by "!".
Thus, "%400,501{User-agent}i" logs User-agent: on 400 errors
and 501 errors (Bad Request, Not Implemented) only;
"%!200,304,302{Referer}i" logs Referer: on all requests which
did <strong>not</strong> return some sort of normal status.</p>
<p>Note that there is no escaping performed on the strings from
%...r, %...i and %...o. This is mainly to comply with the
requirements of the Common Log Format. This implies that
clients can insert control characters into the log, so care
should be taken when dealing with raw log files.</p>
<p>Some commonly used log format strings are:</p>
<dl>
<dt>Common Log Format (CLF)</dt>
<dd><code>"%h %l %u %t \"%r\" %>s %b"</code></dd>
<dt>Common Log Format with Virtual Host</dt>
<dd><code>"%v %h %l %u %t \"%r\" %>s %b"</code></dd>
<dt>NCSA extended/combined log format</dt>
<dd><code>"%h %l %u %t \"%r\" %>s %b \"%{Referer}i\"
\"%{User-agent}i\""</code></dd>
<dt>Referer log format</dt>
<dd><code>"%{Referer}i -> %U"</code></dd>
<dt>Agent (Browser) log format</dt>
<dd><code>"%{User-agent}i"</code></dd>
</dl>
<p>Note that the canonical <a href="core.html#servername">ServerName</a> and <a href="mpm_common.html#listen">Listen</a> of the server serving the
request are used for <code>%v</code> and <code>%p</code>
respectively. This happens regardless of the <a href="core.html#usecanonicalname">UseCanonicalName</a> setting
because otherwise log analysis programs would have to duplicate
the entire vhost matching algorithm in order to decide what
host really served the request.</p>
<h2>Security Considerations</h2>
<p>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 logfiles are stored is writable by
anyone other than the user that starts the server.</p>
<hr/><h2><a name="CookieLog">CookieLog</a> <a name="cookielog">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Sets filename for the logging of cookies</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>CookieLog <em>filename</em></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual
host</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_log_config</td></tr><tr><td align="left" valign="top"><a href="directive-dict.html#Compatibility" class="help">Compatibility:</a></td><td>Only available in Apache 1.2 and above</td></tr></table></td></tr></table>
<p>The <code class="directive">CookieLog</code> directive sets the
filename for logging of cookies. The filename is relative to the
<a href="core.html#serverroot" class="directive"><code class="directive">serverroot</code></a>. This directive is
included only for compatibility with <code><a href="mod_cookies.html">mod_cookies</a></code>,
and is deprecated.</p>
<hr/><h2><a name="CustomLog">CustomLog</a> <a name="customlog">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Sets filename and format of log file</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>CustomLog
<em>file</em>|<em>pipe</em> <em>format</em>|<em>nickname</em>
[env=[!]<em>environment-variable</em>]</td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual
host</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_log_config</td></tr><tr><td align="left" valign="top"><a href="directive-dict.html#Compatibility" class="help">Compatibility:</a></td><td>Nickname only available in Apache 1.3 or later.
Conditional logging available in 1.3.5 or later.</td></tr></table></td></tr></table>
<p>The <code class="directive">CustomLog</code> directive is used to
log requests to the server. A log format is specified, and the
logging can optionally be made conditional on request
characteristics using environment variables.</p>
<p>The first argument, which specifies the location to which
the logs will be written, can take on one of the following two
types of values:</p>
<dl>
<dt><em>file</em></dt>
<dd>A filename, relative to the <a href="core.html#serverroot">ServerRoot</a>.</dd>
<dt><em>pipe</em></dt>
<dd>The pipe character "<code>|</code>", followed by the path
to a program to receive the log information on its standard
input. <strong>Security:</strong> if a program is used, then
it will be run under the user who started httpd. This will be
root if the server was started by root; be sure that the
program is secure.</dd>
</dl>
<p>The second argument specifies what will be written to the
log file. It can specify either a <em>nickname</em> defined by
a previous <a href="#logformat">LogFormat</a> directive, or it
can be an explicit <em>format</em> string as described in the
<a href="#formats">log formats</a> section.</p>
<p>For example, the following two sets of directives have
exactly the same effect:</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
# CustomLog with format nickname<br>
LogFormat "%h %l %u %t \"%r\" %>s %b" common<br>
CustomLog logs/access_log common<br>
<br>
# CustomLog with explicit format string<br>
CustomLog logs/access_log "%h %l %u %t \"%r\" %>s %b"<br>
</code></td></tr></table></blockquote>
<p>The third argument is optional and allows the decision on
whether or not to log a particular request to be based on the
presence or absence of a particular variable in the server
environment. If the specified <a href="../env.html">environment
variable</a> is set for the request (or is not set, in the case
of a '<code>env=!<em>name</em></code>' clause), then the
request will be logged.</p>
<p>Environment variables can be set on a <em>per</em>-request
basis using the <code><a href="mod_setenvif.html">mod_setenvif</a></code>
and/or <code><a href="mod_rewrite.html">mod_rewrite</a></code> modules. For
example, if you don't want to record requests for all GIF
images on your server in a separate logfile but not your main
log, you can use:</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
SetEnvIf Request_URI \.gif$ gif-image<br>
CustomLog gif-requests.log common env=gif-image<br>
CustomLog nongif-requests.log common env=!gif-image
</code></td></tr></table></blockquote>
<hr/><h2><a name="LogFormat">LogFormat</a> <a name="logformat">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Describes a format for use in a log file</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>LogFormat
<em>format</em>|<em>nickname</em> [<em>nickname</em>]</td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual
host</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_log_config</td></tr><tr><td align="left" valign="top"><a href="directive-dict.html#Compatibility" class="help">Compatibility:</a></td><td>Nickname only available in Apache 1.3 or later.
</td></tr></table></td></tr></table>
<p>This directive specifies the format of the access log
file.</p>
<p>The <code class="directive">LogFormat</code> directive can take one of two
forms. In the first form, where only one argument is specified,
this directive sets the log format which will be used by logs
specified in subsequent <code class="directive">TransferLog</code>
directives. The single argument can specify an explicit
<em>format</em> as discussed in <a href="#formats">custom log
formats</a> section above. Alternatively, it can use a
<em>nickname</em> to refer to a log format defined in a
previous <code class="directive">LogFormat</code> directive as described
below.</p>
<p>The second form of the <code class="directive">LogFormat</code>
directive associates an explicit <em>format</em> with a
<em>nickname</em>. This <em>nickname</em> can then be used in
subsequent <code class="directive">LogFormat</code> or
<code class="directive">CustomLog</code> directives rather than
repeating the entire format string. A
<code class="directive">LogFormat</code>
directive which defines a nickname <strong>does nothing
else</strong> -- that is, it <em>only</em> defines the
nickname, it doesn't actually apply the format and make it the
default. Therefore, it will not affect subsequent
<code class="directive">TransferLog</code> directives.</p>
<p>For example:</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>LogFormat "%v %h %l %u %t \"%r\" %>s %b"
vhost_common</code></td></tr></table></blockquote>
<hr/><h2><a name="TransferLog">TransferLog</a> <a name="transferlog">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Specifly location of a log file</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>TransferLog <em>file</em>|<em>pipe</em></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual
host</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_log_config</td></tr><tr><td align="left" valign="top"><a href="directive-dict.html#Compatibility" class="help">Compatibility:</a></td><td/></tr></table></td></tr></table>
<p>This directive has exactly the same arguments and effect as
the <code class="directive">CustomLog</code> directive, with the
exception that it does not allow the log format to be specified
explicitly or for conditional logging of requests. Instead, the
log format is determined by the most recently specified
specified <code class="directive">LogFormat</code> directive (which
does not define a nickname). Common Log Format is used if no
other format has been specified.</p>
<p>Example:</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\""<br>
TransferLog logs/access_log
</code></td></tr></table></blockquote>
<hr/></blockquote><h3 align="center">Apache HTTP Server Version 2.0</h3><a href="./"><img src="../images/index.gif" alt="Index"/></a><a href="../"><img src="../images/home.gif" alt="Home"/></a></body></html>
1.1 httpd-2.0/docs/manual/mod/mod_mime.html.en
Index: mod_mime.html.en
===================================================================
<html xmlns="http://www.w3.org/TR/xhtml1/strict"><head><!--
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
This file is generated from xml source: DO NOT EDIT
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
--><title>mod_mime- Apache HTTP Server</title><link href="../style/manual.css" type="text/css" rel="stylesheet"/></head><body><blockquote><div align="center"><img src="../images/sub.gif" alt="[APACHE DOCUMENTATION]"/><h3>Apache HTTP Server Version 2.0</h3></div><h1 align="center">Apache Module mod_mime</h1><table cellspacing="1" cellpadding="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td valign="top"><span class="help">Description:</span></td><td>Associates the requested filename's extensions
with the file's behavior (handlers and filters)
and content (mime-type, language, character set and
encoding)</td></tr><tr><td><a href="module-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="module-dict.html#ModuleIdentifier" class="help">Module Identifier:</a></td><td>mime_module</td></tr></table></td></tr></table><h2>Summary</h2>
<p>This module is used to associate various bits of "meta
information" with files by their filename extensions. This
information relates the filename of the document to it's
mime-type, language, character set and encoding. This
information is sent to the browser, and participates in content
negotiation, so the user's preferences are respected when
choosing one of several possible files to serve. See
<code><a href="mod_negotiation.html">mod_negotiation</a></code> for more information
about content negotiation. </p>
<p>The directives <a href="#addcharset" class="directive"><code class="directive">AddCharset</code></a>, <a href="#addencoding" class="directive"><code class="directive">AddEncoding</code></a>, <a href="#addlanguage" class="directive"><code class="directive">AddLanguage</code></a> and <a href="#addtype" class="directive"><code class="directive">AddType</code></a> are all used to map file
extensions onto the meta-information for that file. Respectively
they set the character set, content-encoding, content-language,
and MIME-type (content-type) of documents. The directive <a href="#typesconfig" class="directive"><code class="directive">TypesConfig</code></a> is used to specify a
file which also maps extensions onto MIME types. </p>
<p>In addition, <code><a href="mod_mime.html">mod_mime</a></code> may define the <a href="../handler.html">handler</a> and <a href="../filter.html">filters</a> that originate and process
content. The directives <a href="#addhandler" class="directive"><code class="directive">AddHandler</code></a>, <a href="#addoutputfilter" class="directive"><code class="directive">AddOutputFilter</code></a>, and <a href="#addinputfilter" class="directive"><code class="directive">AddInputFilter</code></a> control the modules
or scripts that serve the document. The <a href="#multiviewsmatch" class="directive"><code class="directive">MultiviewsMatch</code></a> directive allows
<code><a href="mod_negotiation.html">mod_negotiation</a></code> to consider these file extensions
to included when testing Multiviews matches.</p>
<p>While <code><a href="mod_mime.html">mod_mime</a></code> associates meta-information
with filename extensions, the <code><a href="core.html">core</a></code> server
provides directives that are used to associate all the files in a
given container (<em>e.g.</em>, <a href="core.html#location" class="directive"><code class="directive"><location></code></a>, <a href="core.html#directory" class="directive"><code class="directive"><directory></code></a>, or <a href="core.html#files" class="directive"><code class="directive"><Files></code></a>) with particular
meta-information. These directives include <a href="core.html#forcetype" class="directive"><code class="directive">ForceType</code></a>, <a href="core.html#sethandler" class="directive"><code class="directive">SetHandler</code></a>, <a href="core.html#setinputfilter" class="directive"><code class="directive">SetInputFilter</code></a>, and <a href="core.html#setoutputfilter" class="directive"><code class="directive">SetOutputFilter</code></a>. The core directives
override any filename extension mappings defined in
<code><a href="mod_mime.html">mod_mime</a></code>.</p>
<p>Note that changing the meta-information for a file does not
change the value of the <code>Last-Modified</code> header.
Thus, previously cached copies may still be used by a client or
proxy, with the previous headers. If you change the
meta-information (language, content type, character set or
encoding) you may need to 'touch' affected files (updating
their last modified date) to ensure that all visitors are
receive the corrected content headers.</p>
<h2>Directives</h2><ul><li><a href="#addcharset">AddCharset</a></li><li><a href="#addencoding">AddEncoding</a></li><li><a href="#addhandler">AddHandler</a></li><li><a href="#addinputfilter">AddInputFilter</a></li><li><a href="#addlanguage">AddLanguage</a></li><li><a href="#addoutputfilter">AddOutputFilter</a></li><li><a href="#addtype">AddType</a></li><li><a href="#defaultlanguage">DefaultLanguage</a></li><li><a href="#multiviewsmatch">MultiviewsMatch</a></li><li><a href="#removecharset">RemoveCharset</a></li><li><a href="#removeencoding">RemoveEncoding</a></li><li><a href="#removehandler">RemoveHandler</a></li><li><a href="#removeinputfilter">RemoveInputFilter</a></li><li><a href="#removelanguage">RemoveLanguage</a></li><li><a href="#removeoutputfilter">RemoveOutputFilter</a></li><li><a href="#removetype">RemoveType</a></li><li><a href="#typesconfig">TypesConfig</a></li></ul><p><strong>See also </strong></p><ul><li><a href="mod_mime_magic.html#mimemagicfile" class="directive"><code class="directive">MimeMagicFile</code></a></li><li><a href="core.html#adddefaultcharset" class="directive"><code class="directive">AddDefaultCharset</code></a></li><li><a href="core.html#forcetype" class="directive"><code class="directive">ForceType</code></a></li><li><a href="core.html#defaulttype" class="directive"><code class="directive">DefaultType</code></a></li><li><a href="core.html#sethandler" class="directive"><code class="directive">SetHandler</code></a></li><li><a href="core.html#setinputfilter" class="directive"><code class="directive">SetInputFilter</code></a></li><li><a href="core.html#setoutputfilter" class="directive"><code class="directive">SetOutputFilter</code></a></li></ul><h2><a name="multipleext">Files with Multiple Extensions</a></h2>
<p>Files can have more than one extension, and the order of the
extensions is <em>normally</em> irrelevant. For example, if the
file <code>welcome.html.fr</code> maps onto content type
text/html and language French then the file <code>welcome.fr.html</code>
will map onto exactly the same information. If more than one
extension is given which maps onto the same
type of meta-information, then the one to the right will be
used. For example, if ".gif" maps to the MIME-type image/gif
and ".html" maps to the MIME-type text/html, then the file
<code>welcome.gif.html</code> will be associated with the
MIME-type "text/html".</p>
<p>Care should be taken when a file with multiple extensions
gets associated with both a MIME-type and a handler. This will
usually result in the request being by the module associated
with the handler. For example, if the <code>.imap</code>
extension is mapped to the handler "imap-file" (from mod_imap)
and the <code>.html</code> extension is mapped to the MIME-type
"text/html", then the file <code>world.imap.html</code> will be
associated with both the "imap-file" handler and "text/html"
MIME-type. When it is processed, the "imap-file" handler will
be used, and so it will be treated as a mod_imap imagemap
file.</p>
<h2><a name="contentencoding">Content encoding</a></h2>
<p>A file of a particular MIME type can additionally be encoded a
particular way to simplify transmission over the Internet.
While this usually will refer to compression, such as
<code>gzip</code>, it can also refer to encryption, such a
<code>pgp</code> or to an encoding such as UUencoding, which is
designed for transmitting a binary file in an ASCII (text)
format.</p>
<p>The MIME RFC puts it this way:</p>
<blockquote><table><tr><td bgcolor="#e0e5f5">
The Content-Encoding entity-header field is used as a
modifier to the media-type. When present, its value indicates
what additional content coding has been applied to the
resource, and thus what decoding mechanism must be applied in
order to obtain the media-type referenced by the Content-Type
header field. The Content-Encoding is primarily used to allow
a document to be compressed without losing the identity of
its underlying media type.
</td></tr></table></blockquote>
<p>By using more than one file extension (see <a href="#multipleext">section above about multiple file
extensions</a>), you can indicate that a file is of a
particular <em>type</em>, and also has a particular
<em>encoding</em>. </p>
<p>For example, you may have a file which is a Microsoft Word
document, which is pkzipped to reduce its size. If the
<code>.doc</code> extension is associated with the Microsoft
Word file type, and the <code>.zip</code> extension is
associated with the pkzip file encoding, then the file
<code>Resume.doc.zip</code>would be known to be a pkzip'ed Word
document.</p>
<p>Apache send a <code>Content-encoding</code> header with the
resource, in order to tell the client browser about the
encoding method.</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>Content-encoding: pkzip</code></td></tr></table></blockquote>
<h2>Character sets and languages</h2>
<p>In addition to file type and the file encoding,
another important piece of information is what language a
particular document is in, and in what character set the file
should be displayed. For example, the document might be written
in the Vietnamese alphabet, or in Cyrillic, and should be
displayed as such. This information, also, is transmitted in
HTTP headers.</p>
<p>The character set, language encoding and mime type are all
used in the process of content negotiation (See
<code><a href="mod_negotiation.html">mod_negotiation</a></code>) to determine
which document to give to the client, when there are
alternative documents in more than one character set, language,
encoding or mime type. All filename extensions associations
created with <code><a href="AddCharset.html">AddCharset</a></code>, <code><a href="AddEncoding.html">AddEncoding</a></code>,
<code><a href="AddLanguage.html">AddLanguage</a></code> and <code><a href="AddType.html">AddType</a></code> directives
(and extensions listed in the <code><a href="MimeMagicFile.html">MimeMagicFile</a></code>)
participate in this select process. Filename extensions that
are only associated using the <code><a href="AddHandler.html">AddHandler</a></code>,
<code><a href="AddInputFilter.html">AddInputFilter</a></code> or <code><a href="AddOutputFilter.html">AddOutputFilter</a></code>
directives may be included or excluded from matching by using
the <code class="directive">MultiviewsMatch</code> directive.</p>
<h3>Charset</h3>
<p>To convey this further information, Apache optionally sends
a <code>Content-Language</code> header, to specify the language
that the document is in, and can append additional information
onto the <code>Content-Type</code> header to indicate the
particular character set that should be used to correctly
render the information.</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
Content-Language: en, fr<br>
Content-Type: text/plain; charset=ISO-8859-2
</code></td></tr></table></blockquote>
<p>The language specification is the two-letter abbreviation
for the language. The <code>charset</code> is the name of the
particular character set which should be used.</p>
<hr/><h2><a name="AddCharset">AddCharset</a> <a name="addcharset">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Maps the given filename extensions
to the specified content charset</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>AddCharset <em>charset extension</em>
[<em>extension</em>] ...</td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host, directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>FileInfo</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_mime</td></tr><tr><td align="left" valign="top"><a href="directive-dict.html#Compatibility" class="help">Compatibility:</a></td><td>AddCharset is only available in Apache
1.3.10 and later</td></tr></table></td></tr></table>
<p>The AddCharset directive maps the given filename extensions
to the specified content charset. <em>charset</em> is the MIME
charset parameter of filenames containing <em>extension</em>.
This mapping is added to any already in force, overriding any
mappings that already exist for the same <em>extension</em>.</p>
<p>Example:</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
AddLanguage ja .ja<br>
AddCharset EUC-JP .euc<br>
AddCharset ISO-2022-JP .jis<br>
AddCharset SHIFT_JIS .sjis
</code></td></tr></table></blockquote>
<p>Then the document <code>xxxx.ja.jis</code> will be treated
as being a Japanese document whose charset is ISO-2022-JP (as
will the document <code>xxxx.jis.ja</code>). The AddCharset
directive is useful for both to inform the client about the
character encoding of the document so that the document can be
interpreted and displayed appropriately, and for <a href="../content-negotiation.html">content negotiation</a>,
where the server returns one from several documents based on
the client's charset preference.</p>
<p>The <em>extension</em> argument is case-insensitive, and can
be specified with or without a leading dot.</p>
<p><strong>See also </strong></p><ul><li><code><a href="mod_negotiation.html">mod_negotiation</a></code></li><li><a href="core.html#adddefaultcharset" class="directive"><code class="directive">AddDefaultCharset</code></a></li></ul><hr/><h2><a name="AddEncoding">AddEncoding</a> <a name="addencoding">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Maps the given filename extensions
to the specified encoding type</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>AddEncoding
<em>MIME-enc extension</em> [<em>extension</em>] ...</td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host, directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>FileInfo</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_mime</td></tr></table></td></tr></table>
<p>The AddEncoding directive maps the given filename extensions
to the specified encoding type. <em>MIME-enc</em> is the MIME
encoding to use for documents containing the
<em>extension</em>. This mapping is added to any already in
force, overriding any mappings that already exist for the same
<em>extension</em>. Example:</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
AddEncoding x-gzip .gz<br>
AddEncoding x-compress .Z
</code></td></tr></table></blockquote>
<p>This will cause filenames containing the .gz extension to be
marked as encoded using the x-gzip encoding, and filenames
containing the .Z extension to be marked as encoded with
x-compress. </p>
<p>Old clients expect <code>x-gzip</code> and
<code>x-compress</code>, however the standard dictates that
they're equivalent to <code>gzip</code> and
<code>compress</code> respectively. Apache does content
encoding comparisons by ignoring any leading <code>x-</code>.
When responding with an encoding Apache will use whatever form
(<em>i.e.</em>, <code>x-foo</code> or <code>foo</code>) the
client requested. If the client didn't specifically request a
particular form Apache will use the form given by the
<code>AddEncoding</code> directive. To make this long story
short, you should always use <code>x-gzip</code> and
<code>x-compress</code> for these two specific encodings. More
recent encodings, such as <code>deflate</code> should be
specified without the <code>x-</code>.</p>
<p>The <em>extension</em> argument is case-insensitive, and can
be specified with or without a leading dot.</p>
<hr/><h2><a name="AddHandler">AddHandler</a> <a name="addhandler">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Maps the filename extensions
to the specified handler</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>AddHandler
<em>handler-name extension</em> [<em>extension</em>] ...</td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host, directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>FileInfo</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_mime</td></tr><tr><td align="left" valign="top"><a href="directive-dict.html#Compatibility" class="help">Compatibility:</a></td><td/></tr></table></td></tr></table>
<p>Files having the named <em>extension</em> will be served by the
specified <a href="../handler.html">handler-name</a>. This mapping is
added to any already in force, overriding any mappings that already
exist for the same <em>extension</em>. For example, to activate CGI
scripts with the file extension "<code>.cgi</code>", you might
use:</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
AddHandler cgi-script .cgi
</code></td></tr></table></blockquote>
<p>Once that has been put into your srm.conf or httpd.conf
file, any file containing the "<code>.cgi</code>" extension
will be treated as a CGI program.</p>
<p>The <em>extension</em> argument is case-insensitive, and can
be specified with or without a leading dot.</p>
<p><strong>See also </strong></p><ul><li><a href="core.html#sethandler" class="directive"><code class="directive">SetHandler</code></a></li></ul><hr/><h2><a name="AddInputFilter">AddInputFilter</a> <a name="addinputfilter">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Maps filename extensions
to the filters that will process
client requests</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>AddInputFilter
<em>filter</em>[<em>;filter</em>...] extension
[<em>extension</em> ...]</td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host, directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_mime</td></tr><tr><td align="left" valign="top"><a href="directive-dict.html#Compatibility" class="help">Compatibility:</a></td><td>AddInputFilter
is only available in Apache 2.0.26 and later.</td></tr></table></td></tr></table>
<p>AddInputFilter maps the filename extensions <em>extension</em>
to the <a href="../filter.html">filters</a> 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 <a href="core.html#setinputfilter">SetInputFilter</a> directive.
This mapping is merged over any already in force, overriding any
mappings that already exist for the same <em>extension</em>.</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. Both the filter and <em>extension</em> arguments are
case-insensitive, and the extension may be specified with or
without a leading dot.</p>
<hr/><h2><a name="AddLanguage">AddLanguage</a> <a name="addlanguage">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Maps the given filename extension
to the specified content language</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>AddLanguage
<em>MIME-lang extension</em> [<em>extension</em>] ...</td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host, directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>FileInfo</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_mime</td></tr></table></td></tr></table>
<p>The AddLanguage directive maps the given filename extension
to the specified content language. <em>MIME-lang</em> is the
MIME language of filenames containing <em>extension</em>. This
mapping is added to any already in force, overriding any
mappings that already exist for the same
<em>extension</em>.</p>
<p>Example:</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
AddEncoding x-compress .Z<br>
AddLanguage en .en<br>
AddLanguage fr .fr
</code></td></tr></table></blockquote>
<p>Then the document <code>xxxx.en.Z</code> will be treated as
being a compressed English document (as will the document
<code>xxxx.Z.en</code>). Although the content language is
reported to the client, the browser is unlikely to use this
information. The AddLanguage directive is more useful for <a href="../content-negotiation.html">content negotiation</a>,
where the server returns one from several documents based on
the client's language preference.</p>
<p>If multiple language assignments are made for the same
extension, the last one encountered is the one that is used.
That is, for the case of:</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
AddLanguage en .en<br>
AddLanguage en-uk .en<br>
AddLanguage en-us .en
</code></td></tr></table></blockquote>
<p>documents with the extension "<code>.en</code>" would be
treated as being "<code>en-us</code>".</p>
<p>The <em>extension</em> argument is case-insensitive, and can
be specified with or without a leading dot.</p>
<p><strong>See also </strong></p><ul><li><code><a href="mod_negotiation.html">mod_negotiation</a></code></li></ul><hr/><h2><a name="AddOutputFilter">AddOutputFilter</a> <a name="addoutputfilter">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>maps the filename
extensions to the filters that will process
responses from the server</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>AddOutputFilter
<em>filter</em>[<em>;filter</em>...] extension
[<em>extension</em> ...]</td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host, directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td/></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_mime</td></tr><tr><td align="left" valign="top"><a href="directive-dict.html#Compatibility" class="help">Compatibility:</a></td><td>AddOutputFilter
is only available in Apache 2.0.26 and later.</td></tr></table></td></tr></table>
<p>The <code class="directive">AddOutputFilter</code> directive maps the
filename extensions <em>extension</em> to the <a href="../filter.html">filters</a> 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
<a href="core.html#setoutputfilter" class="directive"><code class="directive">SetOutputFilter</code></a>
directive. This mapping is merged over any already in force,
overriding any mappings that already exist for the same
<em>extension</em>.</p>
<p>For example, the following configuration will process all
.shtml files for server-side includes and will then compress
the output using <code><a href="mod_deflate.html">mod_deflate</a></code>.</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
AddOutputFilter INCLUDES;DEFLATE shtml
</code></td></tr></table></blockquote>
<p>If more than one filter is specified, they must be separated
by semicolons in the order in which they should process the
content. Both the filter and <em>extension</em> arguments are
case-insensitive, and the extension may be specified with or
without a leading dot.</p>
<hr/><h2><a name="AddType">AddType</a> <a name="addtype">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Maps the given filename extensions
onto the specified content type</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>AddType <em>MIME-type
extension</em> [<em>extension</em>] ...</td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host, directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>FileInfo</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_mime</td></tr></table></td></tr></table>
<p>The AddType directive maps the given filename extensions onto
the specified content type. <em>MIME-type</em> is the MIME type to
use for filenames containing <em>extension</em>. This mapping is
added to any already in force, overriding any mappings that
already exist for the same <em>extension</em>. This directive can
be used to add mappings not listed in the MIME types file (see the
<a href="#typesconfig" class="directive"><code class="directive">TypesConfig</code></a>
directive).</p>
<p>Example:</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
AddType image/gif .gif
</code></td></tr></table></blockquote>
<blockquote><table><tr><td bgcolor="#e0e5f5">It is recommended that new MIME types be added using the
AddType directive rather than changing the
<code class="directive">TypesConfig</code> file. </td></tr></table></blockquote>
<p>The <em>extension</em> argument is case-insensitive, and can
be specified with or without a leading dot.</p>
<p><strong>See also </strong></p><ul><li><a href="core.html#defaulttype" class="directive"><code class="directive">DefaultType</code></a></li><li><a href="core.html#forcetype" class="directive"><code class="directive">ForceType</code></a></li></ul><hr/><h2><a name="DefaultLanguage">DefaultLanguage</a> <a name="defaultlanguage">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Sets all files in the given scope to the
specified language</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>DefaultLanguage
<em>MIME-lang</em></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host, directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>FileInfo</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_mime</td></tr><tr><td align="left" valign="top"><a href="directive-dict.html#Compatibility" class="help">Compatibility:</a></td><td>DefaultLanguage
is only available in Apache 1.3.4 and later.</td></tr></table></td></tr></table>
<p>The DefaultLanguage directive tells Apache that all files in
the directive's scope (<em>e.g.</em>, all files covered by the
current <code><Directory></code> container) that don't
have an explicit language extension (such as <code>.fr</code>
or <code>.de</code> as configured by <code>AddLanguage</code>)
should be considered to be in the specified <em>MIME-lang</em>
language. This allows entire directories to be marked as
containing Dutch content, for instance, without having to
rename each file. Note that unlike using extensions to specify
languages, <code>DefaultLanguage</code> can only specify a
single language.</p>
<p>If no <code>DefaultLanguage</code> directive is in force,
and a file does not have any language extensions as configured
by <code>AddLanguage</code>, then that file will be considered
to have no language attribute.</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><p align="center"><strong>Example</strong></p><code>
DeafaultLanguage en
</code></td></tr></table></blockquote>
<p><strong>See also </strong></p><ul><li><code><a href="mod_negotiation.html">mod_negotiation</a></code></li></ul><hr/><h2><a name="MultiviewsMatch">MultiviewsMatch</a> <a name="multiviewsmatch">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>The types of files that will be included when
searching for a matching file with MultiViews</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>MultiviewsMatch
<em>[NegotiatedOnly] [Handlers] [Filters] [Any]</em></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host, directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>FileInfo</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_mime</td></tr><tr><td align="left" valign="top"><a href="directive-dict.html#Compatibility" class="help">Compatibility:</a></td><td>Available
in Apache 2.0.26 and later.</td></tr></table></td></tr></table>
<p>MultiviewsMatch permits three different behaviors for
<a href="mod_negotiation.html">mod_negotiation</a>'s Multiviews
feature. Multiviews allows a request for a file, e.g. index.html,
to match any negotiated extensions following the base request,
e.g. index.html.en, index.html,fr, or index.html.gz.</p>
<p>The NegotiatedOnly option provides that every extension following
the base name must correlate to a recognized mod_mime extension for
content negotation, e.g. Charset, Content-Type, Language, or
Encoding. This is the strictest implementation with the fewest
unexpected side effects, and is the default behavior.</p>
<p>To include extensions associated with Handlers and/or Filters,
set the MultiviewsMatch directive to either Handlers, Filters, or
both option keywords. If all other factors are equal, the smallest
file will be served, e.g. in deciding between index.html.cgi of 500
characters and index.html.pl of 1000 bytes, the .cgi file would win
in this example. Users of .asis files might prefer to use the
Handler option, if .asis files are associated with the asis-handler.</p>
<p>You may finally allow Any extensions to match, even if mod_mime
doesn't recognize the extension. This was the behavior in Apache 1.3,
and can cause unpredicatable results, such as serving .old or .bak
files the webmaster never expected to be served.</p>
<p>For example, the following configuration will allow handlers
and filters to participate in Multviews, but will exclude unknown
files:</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
MultiviewsMatch Handlers Filters
</code></td></tr></table></blockquote>
<p><strong>See also </strong></p><ul><li><a href="core.html#options" class="directive"><code class="directive">Options</code></a></li></ul><hr/><h2><a name="RemoveCharset">RemoveCharset</a> <a name="removecharset">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Removes any character set associations for a set of file
extensions</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>RemoveCharset
<em>extension</em> [<em>extension</em>] ...</td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_mime</td></tr><tr><td align="left" valign="top"><a href="directive-dict.html#Compatibility" class="help">Compatibility:</a></td><td>RemoveCharset is
only available in Apache 2.0.24 and later.</td></tr></table></td></tr></table>
<p>The <code>RemoveCharset</code> directive removes any
character set associations for files with the given extensions.
This allows <code>.htaccess</code> files in subdirectories to
undo any associations inherited from parent directories or the
server config files.</p>
<p>The <em>extension</em> argument is case-insensitive, and can
be specified with or without a leading dot.</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><p align="center"><strong>Example</strong></p><code>
RemoveCharset .html .shtml
</code></td></tr></table></blockquote>
<hr/><h2><a name="RemoveEncoding">RemoveEncoding</a> <a name="removeencoding">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Removes any content encoding associations for a set of file
extensions</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>RemoveEncoding
<em>extension</em> [<em>extension</em>] ...</td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_mime</td></tr><tr><td align="left" valign="top"><a href="directive-dict.html#Compatibility" class="help">Compatibility:</a></td><td>RemoveEncoding
is only available in Apache 1.3.13 and later.</td></tr></table></td></tr></table>
<p>The <code>RemoveEncoding</code> directive removes any
encoding associations for files with the given extensions. This
allows <code>.htaccess</code> files in subdirectories to undo
any associations inherited from parent directories or the
server config files. An example of its use might be:</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
<dl>
<dt><code>/foo/.htaccess:</code></dt>
<dd><code>AddEncoding x-gzip .gz</code><br>
<code>AddType text/plain .asc</code><br>
<code><Files *.gz.asc></code><br>
<code> RemoveEncoding
.gz</code><br>
<code></Files></code></dd>
</dl>
</code></td></tr></table></blockquote>
<p>This will cause <code>foo.gz</code> to be marked as being
encoded with the gzip method, but <code>foo.gz.asc</code> as an
unencoded plaintext file.</p>
<p><strong>Note:</strong>RemoveEncoding directives are processed
<em>after</em> any AddEncoding directives, so it is possible they
may undo the effects of the latter if both occur within the
same directory configuration.</p>
<p>The <em>extension</em> argument is case-insensitive, and can
be specified with or without a leading dot.</p>
<hr/><h2><a name="RemoveHandler">RemoveHandler</a> <a name="removehandler">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Removes any handler associations for a set of file
extensions</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>RemoveHandler
<em>extension</em> [<em>extension</em>] ...</td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_mime</td></tr><tr><td align="left" valign="top"><a href="directive-dict.html#Compatibility" class="help">Compatibility:</a></td><td>RemoveHandler is
only available in Apache 1.3.4 and later.</td></tr></table></td></tr></table>
<p>The <code>RemoveHandler</code> directive removes any handler
associations for files with the given extensions. This allows
<code>.htaccess</code> files in subdirectories to undo any
associations inherited from parent directories or the server
config files. An example of its use might be:</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
<dl>
<dt><code>/foo/.htaccess:</code></dt>
<dd><code>AddHandler server-parsed .html</code></dd>
<dt><code>/foo/bar/.htaccess:</code></dt>
<dd><code>RemoveHandler .html</code></dd>
</dl>
</code></td></tr></table></blockquote>
<p>This has the effect of returning <code>.html</code> files in
the <code>/foo/bar</code> directory to being treated as normal
files, rather than as candidates for parsing (see the <a href="mod_include.html"><code>mod_include</code></a>
module).</p>
<p>The <em>extension</em> argument is case-insensitive, and can
be specified with or without a leading dot.</p>
<hr/><h2><a name="RemoveInputFilter">RemoveInputFilter</a> <a name="removeinputfilter">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Removes any input filter associations for a set of file
extensions</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>RemoveInputFilter
<em>extension</em> [<em>extension</em>] ...</td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_mime</td></tr><tr><td align="left" valign="top"><a href="directive-dict.html#Compatibility" class="help">Compatibility:</a></td><td>RemoveInputFilter is only available in Apache
2.0.26 and later.</td></tr></table></td></tr></table>
<p>The <code>RemoveInputFilter</code> directive removes any
input filter associations for files with the given extensions.
This allows <code>.htaccess</code> files in subdirectories to
undo any associations inherited from parent directories or the
server config files.</p>
<p>The <em>extension</em> argument is case-insensitive, and can
be specified with or without a leading dot.</p>
<hr/><h2><a name="RemoveLanguage">RemoveLanguage</a> <a name="removelanguage">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Removes any language associations for a set of file
extensions</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>RemoveLanguage
<em>extension</em> [<em>extension</em>] ...</td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_mime</td></tr><tr><td align="left" valign="top"><a href="directive-dict.html#Compatibility" class="help">Compatibility:</a></td><td>RemoveLanguage
is only available in Apache 2.0.24 and later.</td></tr></table></td></tr></table>
<p>The <code>RemoveLanguage</code> directive removes any
language associations for files with the given extensions. This
allows <code>.htaccess</code> files in subdirectories to undo
any associations inherited from parent directories or the
server config files.</p>
<p>The <em>extension</em> argument is case-insensitive, and can
be specified with or without a leading dot.</p>
<hr/><h2><a name="RemoveOutputFilter">RemoveOutputFilter</a> <a name="removeoutputfilter">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Removes any output filter associations for a set of file
extensions</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>RemoveOutputFilter
<em>extension</em> [<em>extension</em>] ...</td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td/></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_mime</td></tr><tr><td align="left" valign="top"><a href="directive-dict.html#Compatibility" class="help">Compatibility:</a></td><td>RemoveOutputFilter is only available in Apache
2.0.26 and later.</td></tr></table></td></tr></table>
<p>The <code>RemoveOutputFilter</code> directive removes any
output filter associations for files with the given extensions.
This allows <code>.htaccess</code> files in subdirectories to
undo any associations inherited from parent directories or the
server config files.</p>
<p>The <em>extension</em> argument is case-insensitive, and can
be specified with or without a leading dot.</p>
<hr/><h2><a name="RemoveType">RemoveType</a> <a name="removetype">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Removes any content type associations for a set of file
extensions</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>RemoveType
<em>extension</em> [<em>extension</em>] ...</td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td/></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_mime</td></tr><tr><td align="left" valign="top"><a href="directive-dict.html#Compatibility" class="help">Compatibility:</a></td><td>RemoveType is
only available in Apache 1.3.13 and later.</td></tr></table></td></tr></table>
<p>The <code class="directive">RemoveType</code> directive removes any MIME type
associations for files with the given extensions. This allows
<code>.htaccess</code> files in subdirectories to undo any
associations inherited from parent directories or the server
config files. An example of its use might be:</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
<dl>
<dt><code>/foo/.htaccess:</code></dt>
<dd><code>RemoveType .cgi</code></dd>
</dl>
</code></td></tr></table></blockquote>
<p>This will remove any special handling of <code>.cgi</code>
files in the <code>/foo/</code> directory and any beneath it,
causing the files to be treated as being of the <a href="core.html#defaulttype">default type</a>.</p>
<blockquote><table><tr><td bgcolor="#e0e5f5"><strong>Note:</strong><code><a href="RemoveType.html">RemoveType</a></code> directives
are processed <em>after</em> any <code><a href="AddType.html">AddType</a></code>
directives, so it is possible they may undo the effects of the
latter if both occur within the same directory
configuration.</td></tr></table></blockquote>
<p>The <em>extension</em> argument is case-insensitive, and can
be specified with or without a leading dot.</p>
<hr/><h2><a name="TypesConfig">TypesConfig</a> <a name="typesconfig">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>The location of the mime.types file</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>TypesConfig <em>file-path</em></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>TypesConfig conf/mime.types</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_mime</td></tr></table></td></tr></table>
<p>The TypesConfig directive sets the location of the MIME types
configuration file. <em>Filename</em> is relative to the <a href="core.html#serverroot">ServerRoot</a>. This file sets the
default list of mappings from filename extensions to content
types. Most administrators use the provided
<code>mime.types</code> file, which associates common filename
extensions with IANA registered content types. The current list is
maintained at
<code>http://www.isi.edu/in-notes/iana/assignments/media-types/media-types</code>. This
simplifies the <code>httpd.conf</code> file by providing the
majority of media-type definitions, and may be overridden by
<a href="#addtype" class="directive"><code class="directive">AddType</code></a> directives as
needed. You should not edit the <code>mime.types</code> file,
because it may be replaced when you upgrade your server.</p>
<p>The file contains lines in the format of the arguments to
an <a href="#addtype" class="directive"><code class="directive">AddType</code></a> directive:</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
MIME-type extension extension ...
</code></td></tr></table></blockquote>
<p>
The case of the extension does not matter. Blank lines, and lines
beginning with a hash character (`#') are ignored. </p>
<blockquote><table><tr><td bgcolor="#e0e5f5">Please do not send requests to the Apache HTTP Server Project
to add any new entries in the distributed mime.types file
unless (1) they are already registered with IANA, and (2) they
use widely accepted, non-conflicting filename extensions across
platforms. category/x-subtype requests will be automatically
rejected, as will any new two-letter extensions as they will
likely conflict later with the already crowded language and
character set namespace.</td></tr></table></blockquote>
<p><strong>See also </strong></p><ul><li><code><a href="mod_mime_magic.html">mod_mime_magic</a></code></li></ul><hr/></blockquote><h3 align="center">Apache HTTP Server Version 2.0</h3><a href="./"><img src="../images/index.gif" alt="Index"/></a><a href="../"><img src="../images/home.gif" alt="Home"/></a></body></html>
1.1 httpd-2.0/docs/manual/mod/mod_mime_magic.html.en
Index: mod_mime_magic.html.en
===================================================================
<html xmlns="http://www.w3.org/TR/xhtml1/strict"><head><!--
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
This file is generated from xml source: DO NOT EDIT
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
--><title>mod_mime_magic- Apache HTTP Server</title><link href="../style/manual.css" type="text/css" rel="stylesheet"/></head><body><blockquote><div align="center"><img src="../images/sub.gif" alt="[APACHE DOCUMENTATION]"/><h3>Apache HTTP Server Version 2.0</h3></div><h1 align="center">Apache Module mod_mime_magic</h1><table cellspacing="1" cellpadding="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td valign="top"><span class="help">Description:</span></td><td>Determines the MIME type of a file
by looking at a few bytes of its contents</td></tr><tr><td><a href="module-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="module-dict.html#ModuleIdentifier" class="help">Module Identifier:</a></td><td>mime_magic_module</td></tr></table></td></tr></table><h2>Summary</h2>
<p>This module determines the MIME type of files in the same
way the Unix file(1) command works: it looks at the first few
bytes of the file. It is intended as a "second line of defense"
for cases that <code><a href="mod_mime.html">mod_mime</a></code> can't
resolve. To assure that mod_mime gets first try at determining
a file's MIME type, be sure to list mod_mime_magic
<strong>before</strong> mod_mime in the configuration.</p>
<p>This module is derived from a free version of the
<code>file(1)</code> command for Unix, which uses "magic
numbers" and other hints from a file's contents to figure out
what the contents are. This module is active only if the magic
file is specified by the <a href="#mimemagicfile" class="directive"><code class="directive">MimeMagicFile</code></a> directive.</p>
<h2>Directives</h2><ul><li><a href="#mimemagicfile">MimeMagicFile</a></li></ul><h2>Format of the Magic File</h2>
<p>The contents of the file are plain ASCII text in 4-5
columns. Blank lines are allowed but ignored. Commented lines
use a hash mark "#". The remaining lines are parsed for the
following columns:</p>
<table border="1">
<tr valign="top">
<th>Column</th>
<th>Description</th>
</tr>
<tr valign="top">
<td>1</td>
<td>byte number to begin checking from<br>
">" indicates a dependency upon the previous non-">"
line</td>
</tr>
<tr valign="top">
<td>2</td>
<td>
type of data to match
<table border="1">
<tr>
<td>byte</td>
<td>single character</td>
</tr>
<tr>
<td>short</td>
<td>machine-order 16-bit integer</td>
</tr>
<tr>
<td>long</td>
<td>machine-order 32-bit integer</td>
</tr>
<tr>
<td>string</td>
<td>arbitrary-length string</td>
</tr>
<tr>
<td>date</td>
<td>long integer date (seconds since Unix
epoch/1970)</td>
</tr>
<tr>
<td>beshort</td>
<td>big-endian 16-bit integer</td>
</tr>
<tr>
<td>belong</td>
<td>big-endian 32-bit integer</td>
</tr>
<tr>
<td>bedate</td>
<td>big-endian 32-bit integer date</td>
</tr>
<tr>
<td>leshort</td>
<td>little-endian 16-bit integer</td>
</tr>
<tr>
<td>lelong</td>
<td>little-endian 32-bit integer</td>
</tr>
<tr>
<td>ledate</td>
<td>little-endian 32-bit integer date</td>
</tr>
</table>
</td>
</tr>
<tr valign="top">
<td>3</td>
<td>contents of data to match</td>
</tr>
<tr valign="top">
<td>4</td>
<td>MIME type if matched</td>
</tr>
<tr valign="top">
<td>5</td>
<td>MIME encoding if matched (optional)</td>
</tr>
</table>
<p>For example, the following magic file lines would recognize
some audio formats.</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
<pre>
# Sun/NeXT audio data
0 string .snd
>12 belong 1 audio/basic
>12 belong 2 audio/basic
>12 belong 3 audio/basic
>12 belong 4 audio/basic
>12 belong 5 audio/basic
>12 belong 6 audio/basic
>12 belong 7 audio/basic
>12 belong 23 audio/x-adpcm
</pre>
</code></td></tr></table></blockquote>
<p>Or these would recognize the difference between "*.doc" files
containing Microsoft Word or FrameMaker documents. (These are
incompatible file formats which use the same file suffix.)</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
<pre>
# Frame
0 string \<MakerFile application/x-frame
0 string \<MIFFile application/x-frame
0 string \<MakerDictionary application/x-frame
0 string \<MakerScreenFon application/x-frame
0 string \<MML application/x-frame
0 string \<Book application/x-frame
0 string \<Maker application/x-frame
# MS-Word
0 string \376\067\0\043 application/msword
0 string \320\317\021\340\241\261 application/msword
0 string \333\245-\0\0\0 application/msword
</pre>
</code></td></tr></table></blockquote>
<p>An optional MIME encoding can be included as a fifth column.
For example, this can recognize gzipped files and set the
encoding for them.</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
<pre>
# gzip (GNU zip, not to be confused with [Info-ZIP/PKWARE] zip archiver)
0 string \037\213 application/octet-stream x-gzip
</pre>
</code></td></tr></table></blockquote>
<h2>Performance Issues</h2>
<p>This module is not for every system. If your system is barely
keeping up with its load or if you're performing a web server
benchmark, you may not want to enable this because the
processing is not free.</p>
<p>However, an effort was made to improve the performance of
the original file(1) code to make it fit in a busy web server.
It was designed for a server where there are thousands of users
who publish their own documents. This is probably very common
on intranets. Many times, it's helpful if the server can make
more intelligent decisions about a file's contents than the
file name allows ...even if just to reduce the "why doesn't my
page work" calls when users improperly name their own files.
You have to decide if the extra work suits your
environment.</p>
<p>When compiling an Apache server, this module should be at or
near the top of the list of modules in the Configuration file.
The modules are listed in increasing priority so that will mean
this one is used only as a last resort, just like it was
designed to.</p>
<h2><a name="notes">Notes</a></h2>
<p>The following notes apply to the mod_mime_magic module and are
included here for compliance with contributors' copyright
restrictions that require their acknowledgment. </p>
<pre>
/*
* mod_mime_magic: MIME type lookup via file magic numbers
* Copyright (c) 1996-1997 Cisco Systems, Inc.
*
* This software was submitted by Cisco Systems to the Apache Group in July
* 1997. Future revisions and derivatives of this source code must
* acknowledge Cisco Systems as the original contributor of this module.
* All other licensing and usage conditions are those of the Apache Group.
*
* Some of this code is derived from the free version of the file command
* originally posted to comp.sources.unix. Copyright info for that program
* is included below as required.
* ---------------------------------------------------------------------------
* - Copyright (c) Ian F. Darwin, 1987. Written by Ian F. Darwin.
*
* This software is not subject to any license of the American Telephone and
* Telegraph Company or of the Regents of the University of California.
*
* Permission is granted to anyone to use this software for any purpose on any
* computer system, and to alter it and redistribute it freely, subject to
* the following restrictions:
*
* 1. The author is not responsible for the consequences of use of this
* software, no matter how awful, even if they arise from flaws in it.
*
* 2. The origin of this software must not be misrepresented, either by
* explicit claim or by omission. Since few users ever read sources, credits
* must appear in the documentation.
*
* 3. Altered versions must be plainly marked as such, and must not be
* misrepresented as being the original software. Since few users ever read
* sources, credits must appear in the documentation.
*
* 4. This notice may not be removed or altered.
* -------------------------------------------------------------------------
*
* For compliance with Mr Darwin's terms: this has been very significantly
* modified from the free "file" command.
* - all-in-one file for compilation convenience when moving from one
* version of Apache to the next.
* - Memory allocation is done through the Apache API's pool structure.
* - All functions have had necessary Apache API request or server
* structures passed to them where necessary to call other Apache API
* routines. (<em>i.e.</em>, usually for logging, files, or memory allocation in
* itself or a called function.)
* - struct magic has been converted from an array to a single-ended linked
* list because it only grows one record at a time, it's only accessed
* sequentially, and the Apache API has no equivalent of realloc().
* - Functions have been changed to get their parameters from the server
* configuration instead of globals. (It should be reentrant now but has
* not been tested in a threaded environment.)
* - Places where it used to print results to stdout now saves them in a
* list where they're used to set the MIME type in the Apache request
* record.
* - Command-line flags have been removed since they will never be used here.
*
*/
</pre>
<hr/><h2><a name="MimeMagicFile">MimeMagicFile</a> <a name="mimemagicfile">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Enable MIME-type determination based on file contents
using the specified magic file</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>MimeMagicFile <em>file-path</em></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_mime_magic</td></tr></table></td></tr></table>
<p>The <code class="directive">MimeMagicFile</code> directive can be used to
enable this module, the default file is distributed at
<code>conf/magic</code>. Non-rooted paths are relative to the
ServerRoot. Virtual hosts will use the same file as the main
server unless a more specific setting is used, in which case
the more specific setting overrides the main server's file.</p>
<hr/></blockquote><h3 align="center">Apache HTTP Server Version 2.0</h3><a href="./"><img src="../images/index.gif" alt="Index"/></a><a href="../"><img src="../images/home.gif" alt="Home"/></a></body></html>
1.1 httpd-2.0/docs/manual/mod/mod_negotiation.html.en
Index: mod_negotiation.html.en
===================================================================
<html xmlns="http://www.w3.org/TR/xhtml1/strict"><head><!--
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
This file is generated from xml source: DO NOT EDIT
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
--><title>mod_negotiation- Apache HTTP Server</title><link href="../style/manual.css" type="text/css" rel="stylesheet"/></head><body><blockquote><div align="center"><img src="../images/sub.gif" alt="[APACHE DOCUMENTATION]"/><h3>Apache HTTP Server Version 2.0</h3></div><h1 align="center">Apache Module mod_negotiation</h1><table cellspacing="1" cellpadding="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td valign="top"><span class="help">Description:</span></td><td>Provides for <a href="../content-negotiation.html">content negotiation</a></td></tr><tr><td><a href="module-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="module-dict.html#ModuleIdentifier" class="help">Module Identifier:</a></td><td>negotiation_module</td></tr></table></td></tr></table><h2>Summary</h2>
<p>Content negotiation, or more accurately content selection, is
the selection of the document that best matches the clients
capabilities, from one of several available documents. There
are two implementations of this.</p>
<ul>
<li>A type map (a file with the handler
<code>type-map</code>) which explicitly lists the files
containing the variants.</li>
<li>A MultiViews search (enabled by the MultiViews <a href="core.html#options" class="directive"><code class="directive">Options</code></a>, where the server does an
implicit filename pattern match, and choose from amongst the
results.</li>
</ul>
<h2>Directives</h2><ul><li><a href="#cachenegotiateddocs">CacheNegotiatedDocs</a></li><li><a href="#forcelanguagepriority">ForceLanguagePriority</a></li><li><a href="#languagepriority">LanguagePriority</a></li></ul><p><strong>See also </strong></p><ul><li><a href="mod_mime.html#defaultlanguage" class="directive"><code class="directive">DefaultLanguage</code></a></li><li><a href="mod_mime.html#addencoding" class="directive"><code class="directive">AddEncoding</code></a></li><li><a href="mod_mime.html#addlanguage" class="directive"><code class="directive">AddLanguage</code></a></li><li><a href="mod_mime.html#addtype" class="directive"><code class="directive">AddType</code></a></li></ul><h2>Type maps</h2>
<p>A type map has the same format as RFC822 mail headers. It
contains document descriptions separated by blank lines, with
lines beginning with a hash character ('#') treated as
comments. A document description consists of several header
records; records may be continued on multiple lines if the
continuation lines start with spaces. The leading space will be
deleted and the lines concatenated. A header record consists of
a keyword name, which always ends in a colon, followed by a
value. Whitespace is allowed between the header name and value,
and between the tokens of value. The headers allowed are: </p>
<dl>
<dt>Content-Encoding:</dt>
<dd>The encoding of the file. Apache only recognizes
encodings that are defined by an <a href="mod_mime.html#addencoding" class="directive"><code class="directive">AddEncoding</code></a> directive.
This normally includes the encodings <code>x-compress</code>
for compress'd files, and <code>x-gzip</code> for gzip'd
files. The <code>x-</code> prefix is ignored for encoding
comparisons.</dd>
<dt>Content-Language:</dt>
<dd>The language of the variant, as an Internet standard
language tag (RFC 1766). An example is <code>en</code>,
meaning English.</dd>
<dt>Content-Length:</dt>
<dd>The length of the file, in bytes. If this header is not
present, then the actual length of the file is used.</dd>
<dt>Content-Type:</dt>
<dd>
The MIME media type of the document, with optional
parameters. Parameters are separated from the media type
and from one another by a semi-colon, with a syntax of
<code>name=value</code>. Common parameters include:
<dl>
<dt>level</dt>
<dd>an integer specifying the version of the media type.
For <code>text/html</code> this defaults to 2, otherwise
0.</dd>
<dt>qs</dt>
<dd>a floating-point number with a value in the range 0.0
to 1.0, indicating the relative 'quality' of this variant
compared to the other available variants, independent of
the client's capabilities. For example, a jpeg file is
usually of higher source quality than an ascii file if it
is attempting to represent a photograph. However, if the
resource being represented is ascii art, then an ascii
file would have a higher source quality than a jpeg file.
All qs values are therefore specific to a given
resource.</dd>
</dl>
Example:
<blockquote>
<code>Content-Type: image/jpeg; qs=0.8</code>
</blockquote>
</dd>
<dt>URI:</dt>
<dd>The path to the file containing this variant, relative to
the map file.</dd>
</dl>
<h2>MultiViews</h2>
<p>A MultiViews search is enabled by the MultiViews <a href="core.html#options" class="directive"><code class="directive">Options</code></a>. If the server receives a
request for <code>/some/dir/foo</code> and
<code>/some/dir/foo</code> does <em>not</em> exist, then the
server reads the directory looking for all files named
<code>foo.*</code>, and effectively fakes up a type map which
names all those files, assigning them the same media types and
content-encodings it would have if the client had asked for one
of them by name. It then chooses the best match to the client's
requirements, and returns that document.</p>
<hr/><h2><a name="CacheNegotiatedDocs">CacheNegotiatedDocs</a> <a name="cachenegotiateddocs">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Allows content-negotiated documents to be
cached by proxy servers</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>CacheNegotiatedDocs on|off</td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>CacheNegotiatedDocs off</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_negotiation</td></tr><tr><td align="left" valign="top"><a href="directive-dict.html#Compatibility" class="help">Compatibility:</a></td><td>The syntax changed in version 2.0.</td></tr></table></td></tr></table>
<p>If set, this directive allows content-negotiated documents
to be cached by proxy servers. This could mean that clients
behind those proxys could retrieve versions of the documents
that are not the best match for their abilities, but it will
make caching more efficient.</p>
<p>This directive only applies to requests which come from
HTTP/1.0 browsers. HTTP/1.1 provides much better control over
the caching of negotiated documents, and this directive has no
effect in responses to HTTP/1.1 requests.</p>
<p>Prior to version 2.0,
<code class="directive">CacheNegotiatedDocs</code> did not take an
argument; it was turned on by the presence of the directive by
itself.</p>
<hr/><h2><a name="ForceLanguagePriority">ForceLanguagePriority</a> <a name="forcelanguagepriority">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Action to take if a single acceptable document is not
found</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>ForceLanguagePriority None|Prefer|Fallback [Prefer|Fallback]</td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>ForceLanguagePriority None</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host, directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>FileInfo</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_negotiation</td></tr><tr><td align="left" valign="top"><a href="directive-dict.html#Compatibility" class="help">Compatibility:</a></td><td>Available in version 2.0.30 and later</td></tr></table></td></tr></table>
<p>The <code class="directive">ForceLanguagePriority</code> directive uses
the given <a href="#languagepriority" class="directive"><code class="directive">LanguagePriority</code></a> to satisfy
negotation where the server could otherwise not return a single
matching document.</p>
<p><code>ForceLanguagePriority Prefer</code> uses
<code>LanguagePriority</code> to serve a one valid result, rather
than returning an HTTP result 300 (MULTIPLE CHOICES) when there
are several equally valid choices. If the directives below were
given, and the user's Accept-Language header assigned en and de
each as quality .500 (equally acceptable) then then first matching
variant, en, will be served.</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
LanguagePriority en fr de<br>
ForceLanguagePriority Prefer
</code></td></tr></table></blockquote>
<p><code>ForceLanguagePriority Fallback</code> uses
<code>LanguagePriority</code> to serve a valid result, rather than
returning an HTTP result 406 (NOT ACCEPTABLE). If the directives
below were given, and the user's Accept-Language only permitted an
es language response, but such a variant isn't found, then the
first variant from the LanguagePriority list below will be
served.</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
LanguagePriority en fr de<br>
ForceLanguagePriority Fallback
</code></td></tr></table></blockquote>
<p>Both options, Prefer and Fallback, may be specified, so either the
first matching variant from LanguagePriority will be served if more
that one variant is acceptable, or first available document will be
served if none of the variants matched the client's acceptable list of
languages.</p>
<hr/><h2><a name="LanguagePriority">LanguagePriority</a> <a name="languagepriority">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>The precendence of language variants for cases where
the client does not express a preference</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>LanguagePriority <em>MIME-lang</em> [<em>MIME-lang</em>] ...</td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host, directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>FileInfo</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_negotiation</td></tr></table></td></tr></table>
<p>The <code class="directive">LanguagePriority</code> sets the precedence
of language variants for the case where the client does not
express a preference, when handling a MultiViews request. The list
of <em>MIME-lang</em> are in order of decreasing preference.
Example:</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>LanguagePriority en fr de</code></td></tr></table></blockquote>
<p>For a request for <code>foo.html</code>, where
<code>foo.html.fr</code> and <code>foo.html.de</code> both
existed, but the browser did not express a language preference,
then <code>foo.html.fr</code> would be returned.</p>
<p>Note that this directive only has an effect if a 'best'
language cannot be determined by any other means or the <a href="#forcelanguagepriority" class="directive"><code class="directive">ForceLanguagePriority</code></a> directive
is not <code>None</code>. Correctly implemented HTTP/1.1 requests
will mean this directive has no effect.</p>
<hr/></blockquote><h3 align="center">Apache HTTP Server Version 2.0</h3><a href="./"><img src="../images/index.gif" alt="Index"/></a><a href="../"><img src="../images/home.gif" alt="Home"/></a></body></html>
1.1 httpd-2.0/docs/manual/mod/mod_proxy.html.en
Index: mod_proxy.html.en
===================================================================
<html xmlns="http://www.w3.org/TR/xhtml1/strict"><head><!--
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
This file is generated from xml source: DO NOT EDIT
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
--><title>mod_proxy- Apache HTTP Server</title><link href="../style/manual.css" type="text/css" rel="stylesheet"/></head><body><blockquote><div align="center"><img src="../images/sub.gif" alt="[APACHE DOCUMENTATION]"/><h3>Apache HTTP Server Version 2.0</h3></div><h1 align="center">Apache Module mod_proxy</h1><table cellspacing="1" cellpadding="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td valign="top"><span class="help">Description:</span></td><td>HTTP/1.1 proxy/gateway server</td></tr><tr><td><a href="module-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="module-dict.html#ModuleIdentifier" class="help">Module Identifier:</a></td><td>proxy_module</td></tr></table></td></tr></table><h2>Summary</h2>
<blockquote><table><tr><td bgcolor="#ffe5f5"><p align="center"><strong>Warning</strong></p>
This document has been updated to take into account changes
made in the 2.0 version of the Apache HTTP Server. Some of the
information may still be inaccurate, please use it
with care.
</td></tr></table></blockquote>
<p>This module implements a proxy/gateway for Apache. It implements
proxying capability for
<code>FTP</code>,
<code>CONNECT</code> (for SSL),
<code>HTTP/0.9</code>,
<code>HTTP/1.0</code>, and
<code>HTTP/1.1</code>.
The module can be configured to connect to other proxy modules for these
and other protocols.</p>
<p>This module was experimental in Apache 1.1.x. Improvements and bugfixes
were made in Apache v1.2.x and Apache v1.3.x, then the module underwent a major
overhaul for Apache v2.0. The protocol support was upgraded to HTTP/1.1,
and filter support was enabled.</p>
<p>Please note that the <strong>caching</strong> function present in
mod_proxy up to Apache v1.3.x has been <strong>removed</strong> from
mod_proxy and will be incorporated into a new module, mod_cache.</p>
<blockquote><table><tr><td bgcolor="#ffe5f5"><p>Do not enable proxying with <a href="#proxyrequests" class="directive"><code class="directive">ProxyRequests</code></a> until you have
<a href="#access">secured your server</a>. Open proxy servers are
dangerous both to your network and to the Internet at large.</p></td></tr></table></blockquote>
<h2>Directives</h2><ul><li><a href="#allowconnect">AllowCONNECT</a></li><li><a href="#noproxy">NoProxy</a></li><li><a href="#proxyblock">ProxyBlock</a></li><li><a href="#proxydomain">ProxyDomain</a></li><li><a href="#proxyerroroverride">ProxyErrorOverride</a></li><li><a href="#proxymaxforwards">ProxyMaxForwards</a></li><li><a href="#proxypass">ProxyPass</a></li><li><a href="#proxypassreverse">ProxyPassReverse</a></li><li><a href="#proxypreservehost">ProxyPreserveHost</a></li><li><a href="#proxyreceivebuffersize">ProxyReceiveBufferSize</a></li><li><a href="#proxyremote">ProxyRemote</a></li><li><a href="#proxyrequests">ProxyRequests</a></li><li><a href="#proxytimeout">ProxyTimeout</a></li><li><a href="#proxyvia">ProxyVia</a></li></ul><h2><a name="configs">Common configuration topics</a></h2>
<ul>
<li><a href="#forwardreverse">Forward and Reverse Proxies</a></li>
<li><a href="#access">Controlling access to your proxy</a></li>
<li><a href="#shortname">Using Netscape hostname shortcuts</a></li>
<li><a href="#mimetypes">Why doesn't file type <em>xxx</em> download via FTP?</a></li>
<li><a href="#type">How can I force an FTP ASCII download of File <em>xxx</em>?</a></li>
<li><a href="#percent2fhack">How can I access FTP files outside of my home directory?</a></li>
<li><a href="#ftppass">How can I hide the FTP cleartext password in my browser's URL line?</a></li>
<li><a href="#startup">Why does Apache start more slowly when using the
proxy module?</a></li>
<li><a href="#intranet">What other functions are useful for an intranet proxy server?</a></li>
</ul>
<h3><a name="forwardreverse">Forward and Reverse Proxies</a></h3>
<p>Apache can be configured in both a <em>forward</em> and <em>reverse</em>
proxy configuration.</p>
<p>A <em>forward proxy</em> is an intermediate system that enables a browser to connect to a
remote network to which it normally does not have access. A forward proxy
can also be used to cache data, reducing load on the networks between the
forward proxy and the remote webserver.</p>
<p>Apache's mod_proxy can be figured to behave like a forward proxy
using the <a href="#proxyremote" class="directive"><code class="directive">ProxyRemote</code></a>
directive. In addition, caching of data can be achieved by configuring
Apache <code><a href="mod_cache.html">mod_cache</a></code>. Other dedicated forward proxy
packages include <a href="http://www.squid.org">Squid</a>.</p>
<p>A <em>reverse proxy</em> is a webserver system that is capable of serving webpages
sourced from other webservers - in addition to webpages on disk or generated
dynamically by CGI - making these pages look like they originated at the
reverse proxy.</p>
<p>When configured with the mod_cache module the reverse
proxy can act as a cache for slower backend webservers. The reverse proxy
can also enable advanced URL strategies and management techniques, allowing
webpages served using different webserver systems or architectures to
coexist inside the same URL space. Reverse proxy systems are also ideal for
implementing centralised logging websites with many or diverse website
backends. Complex multi-tier webserver systems can be constructed using an
Apache mod_proxy frontend and any number of backend webservers.</p>
<p>The reverse proxy is configured using the
<a href="#proxypass" class="directive"><code class="directive">ProxyPass</code></a> and <a href="#proxypassreverse" class="directive"><code class="directive">ProxyPassReverse</code></a> directives. Caching can be
enabled using mod_cache as with the forward proxy.</p>
<h3><a name="access">Controlling access to your proxy</a></h3>
<p>You can control who can access your proxy via the normal <a href="core.html#directory" class="directive"><code class="directive"><Directory></code></a>
control block using the following example:</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
<Directory proxy:*><br>
Order Deny,Allow<br>
Deny from all<br>
Allow from 192.168.0<br>
</Directory>
</code></td></tr></table></blockquote>
<p>A <a href="core.html#files" class="directive"><code class="directive"><Files></code></a> block
will also work, and is the only method known to work for all possible
URLs in Apache versions earlier than 1.2b10.</p>
<p>When configuring a reverse proxy, access control takes on the
attributes of the normal server <a href="core.html#directory" class="directive"><code class="directive"><directory></code></a> configuration.</p>
<h3><a name="mimetypes">Why doesn't file type <em>xxx</em>
download via FTP?</a></h3>
<p>You probably don't have that particular file type defined as
<em>application/octet-stream</em> in your proxy's mime.types configuration
file. A useful line can be</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
application/octet-stream bin dms lha lzh exe class tgz taz
</code></td></tr></table></blockquote>
<h3><a name="type">How can I force an FTP ASCII download of
File <em>xxx</em>?</a></h3>
<p>In the rare situation where you must download a specific file using the FTP
<strong>ASCII</strong> transfer method (while the default transfer is in
<strong>binary</strong> mode), you can override mod_proxy's default by
suffixing the request with <code>;type=a</code> to force an ASCII transfer.
(FTP Directory listings are always executed in ASCII mode, however.)</p>
<h3><a name="percent2fhck">How can I access FTP files outside
of my home directory?</a></h3>
<p>
An FTP URI is interpreted relative to the home directory of the user
who is logging in. Alas, to reach higher directory levels you cannot
use /../, as the dots are interpreted by the browser and not actually
sent to the FTP server. To address this problem, the so called "Squid
%2f hack" was implemented in the Apache FTP proxy; it is is a solution
which is also used by other popular proxy servers like the <a href="http://www.squid-cache.org/">Squid Proxy Cache</a>. By
prepending /%2f to the path of your request, you can make such a proxy
change the FTP starting directory to / (instead of the home
directory). </p>
<p><strong>Example:</strong> To retrieve the file
<code>/etc/motd</code>, you would use the URL</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>ftp://<em>user@host</em>/%2f/etc/motd</code></td></tr></table></blockquote>
<h3><a name="ftppass">How can I hide the FTP cleartext password
in my browser's URL line?</a></h3>
<p>
To log in to an FTP server by username and password, Apache
uses different strategies.
In absense of a user name and password in the URL altogether,
Apache sends an anomymous login to the FTP server, i.e.,</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
user: anonymous<br>
password: apache_proxy@
</code></td></tr></table></blockquote>
<p>This works for all popular FTP servers which are configured for
anonymous access.</p>
<p>For a personal login with a specific username, you can embed
the user name into the URL, like in:
<code>ftp://<em>username@host</em>/myfile</code>. If the FTP server
asks for a password when given this username (which it should),
then Apache will reply with a [401 Authorization required] response,
which causes the Browser to pop up the username/password dialog.
Upon entering the password, the connection attempt is retried,
and if successful, the requested resource is presented.
The advantage of this procedure is that your browser does not
display the password in cleartext (which it would if you had used
<code>ftp://<em>username:password@host</em>/myfile</code> in
the first place).</p>
<blockquote><table><tr><td bgcolor="#e0e5f5"><p align="center"><strong>Note</strong></p>
The password which is transmitted in such a way
is not encrypted on its way. It travels between your browser and
the Apache proxy server in a base64-encoded cleartext string, and
between the Apache proxy and the FTP server as plaintext. You should
therefore think twice before accessing your FTP server via HTTP
(or before accessing your personal files via FTP at all!) When
using unsecure channels, an eavesdropper might intercept your
password on its way.
</td></tr></table></blockquote>
<h3><a name="startup">Why does Apache start more slowly when
using the proxy module?</a></h3>
<p>If you're using the <a href="#proxyblock" class="directive"><code class="directive">ProxyBlock</code></a>
directive, hostnames' IP addresses are looked up and cached during
startup for later match test. This may take a few seconds (or more)
depending on the speed with which the hostname lookups occur.</p>
<h3><a name="intranet">What other functions are useful for an
intranet proxy server?</a></h3>
<p>An Apache proxy server situated in an intranet needs to forward
external requests through the company's firewall. However, when it has
to access resources within the intranet, it can bypass the firewall
when accessing hosts. The <a href="#noproxy" class="directive"><code class="directive">NoProxy</code></a> directive is useful for
specifying which hosts belong to the intranet and should be accessed
directly.</p>
<p>Users within an intranet tend to omit the local domain name from their
WWW requests, thus requesting "http://somehost/" instead of
"http://somehost.my.dom.ain/". Some commercial proxy servers let them get
away with this and simply serve the request, implying a configured
local domain. When the <a href="#proxydomain" class="directive"><code class="directive">ProxyDomain</code></a> directive
is used and the server is <a href="#proxyrequests">configured for
proxy service</a>, Apache can return a redirect response and send the client
to the correct, fully qualified, server address. This is the preferred method
since the user's bookmark files will then contain fully qualified hosts.</p>
<hr/><h2><a name="AllowCONNECT">AllowCONNECT</a> <a name="allowconnect">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td/></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>AllowCONNECT <em>port</em> [<em>port</em>] ...</td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>AllowCONNECT 443 563</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_proxy</td></tr></table></td></tr></table>
<p>The <code class="directive">AllowCONNECT</code> directive specifies a list
of port numbers to which the proxy <code>CONNECT</code> method may
connect. Today's browsers use this method when a <em>https</em>
connection is requested and proxy tunneling over <em>http</em> is in
effect.<br> By default, only the default https port (443) and the
default snews port (563) are enabled. Use the
<code class="directive">AllowCONNECT</code> directive to overrride this default and
allow connections to the listed ports only.</p>
<hr/><h2><a name="NoProxy">NoProxy</a> <a name="noproxy">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td/></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>NoProxy
<em>Domain</em>|
<em>SubNet</em>|
<em>IpAddr</em>|
<em>Hostname</em>
[<em>Domain</em>|
<em>SubNet</em>|
<em>IpAddr</em>|
<em>Hostname</em>] ...</td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_proxy</td></tr></table></td></tr></table>
<p>This directive is only useful for Apache proxy servers within
intranets. The <code class="directive">NoProxy</code> directive specifies a
list of subnets, IP addresses, hosts and/or domains, separated by
spaces. A request to a host which matches one or more of these is
always served directly, without forwarding to the configured
<a href="#proxyremote" class="directive"><code class="directive">ProxyRemote</code></a> proxy server(s).</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><p align="center"><strong>Example</strong></p><code>
ProxyRemote * http://firewall.mycompany.com:81<br>
NoProxy .mycompany.com 192.168.112.0/21
</code></td></tr></table></blockquote>
<p>The arguments to the NoProxy directive are one of the following type list:</p>
<dl>
<dt><a name="domain">
<em>Domain</em></a></dt>
<dd>A <em>Domain</em> is a partially qualified DNS domain name, preceded
by a period.
It represents a list of hosts which logically belong to the same DNS
domain or zone (<em>i.e.</em>, the suffixes of the hostnames are all ending in
<em>Domain</em>).<br>
Examples: <code>.com</code> <code>.apache.org.</code><br>
To distinguish <em>Domain</em>s from <a href="#hostname"><em>Hostname</em></a>s (both
syntactically and semantically; a DNS domain can have a DNS A record,
too!), <em>Domain</em>s are always written
with a leading period.<br>
Note: Domain name comparisons are done without regard to the case,
and <em>Domain</em>s are always assumed to be anchored in the root
of the DNS tree, therefore two domains <code>.MyDomain.com</code> and
<code>.mydomain.com.</code> (note the trailing period) are
considered equal. Since a domain comparison does not involve a DNS
lookup, it is much more efficient than subnet comparison.</dd>
<dt><a name="subnet">
<em>SubNet</em></a></dt>
<dd>A <em>SubNet</em> is a partially qualified internet address in
numeric (dotted quad) form, optionally followed by a slash and the
netmask, specified as the number of significant bits in the
<em>SubNet</em>. It is used to represent a subnet of hosts which can
be reached over a common network interface. In the absence of the
explicit net mask it is assumed that omitted (or zero valued)
trailing digits specify the mask. (In this case, the netmask can
only be multiples of 8 bits wide.)<br>
Examples:
<dl>
<dt><code>192.168</code> or <code>192.168.0.0</code></dt>
<dd>the subnet 192.168.0.0 with an implied netmask of 16 valid bits
(sometimes used in the netmask form <code>255.255.0.0</code>)</dd>
<dt><code>192.168.112.0/21</code></dt>
<dd>the subnet <code>192.168.112.0/21</code> with a netmask of 21
valid bits (also used in the form 255.255.248.0)</dd>
</dl>
As a degenerate case, a <em>SubNet</em> with 32 valid bits is the
equivalent to an <em>IPAddr</em>, while a <em>SubNet</em> with zero
valid bits (<em>e.g.</em>, 0.0.0.0/0) is the same as the constant
<em>_Default_</em>, matching any IP address. </dd>
<dt><a name="ipaddr">
<em>IPAddr</em></a></dt>
<dd>A <em>IPAddr</em> represents a fully qualified internet address in
numeric (dotted quad) form. Usually, this address represents a
host, but there need not necessarily be a DNS domain name
connected with the address.<br>
Example: 192.168.123.7<br>
Note: An <em>IPAddr</em> does not need to be resolved by the DNS
system, so it can result in more effective apache performance.</dd>
<dt><a name="hostname">
<em>Hostname</em></a></dt>
<dd>A <em>Hostname</em> is a fully qualified DNS domain name which can
be resolved to one or more <a href="#ipaddr"><em>IPAddrs</em></a> via the DNS domain name service.
It represents a logical host (in contrast to
<a href="#domain"><em>Domain</em></a>s, see
above) and must be resolvable to at least one <a href="#ipaddr"><em>IPAddr</em></a> (or often to a list of hosts
with different <a href="#ipaddr"><em>IPAddr</em></a>'s).<br>
Examples: <code>prep.ai.mit.edu</code>
<code>www.apache.org.</code><br>
Note: In many situations, it is more effective to specify an
<a href="#ipaddr"><em>IPAddr</em></a> in place of a
<em>Hostname</em> since a DNS lookup
can be avoided. Name resolution in Apache can take a remarkable deal
of time when the connection to the name server uses a slow PPP
link.<br>
Note: <em>Hostname</em> comparisons are done without regard to the case,
and <em>Hostname</em>s are always assumed to be anchored in the root
of the DNS tree, therefore two hosts <code>WWW.MyDomain.com</code>
and <code>www.mydomain.com.</code> (note the trailing period) are
considered equal.</dd>
</dl>
<p><strong>See also </strong></p><ul><li><a href="../dns-caveats.html">DNS Issues</a></li></ul><hr/><h2><a name="ProxyBlock">ProxyBlock</a> <a name="proxyblock">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td/></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>ProxyBlock *|<em>word|host|domain</em>
[<em>word|host|domain</em>] ...</td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_proxy</td></tr></table></td></tr></table>
<p>The <code class="directive">ProxyBlock</code> directive specifies a list of
words, hosts and/or domains, separated by spaces. HTTP, HTTPS, and
FTP document requests to sites whose names contain matched words,
hosts or domains are <em>blocked</em> by the proxy server. The proxy
module will also attempt to determine IP addresses of list items which
may be hostnames during startup, and cache them for match test as
well. Example:</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
ProxyBlock joes-garage.com some-host.co.uk rocky.wotsamattau.edu
</code></td></tr></table></blockquote>
<p>'rocky.wotsamattau.edu' would also be matched if referenced by IP
address.</p>
<p>Note that 'wotsamattau' would also be sufficient to match
'wotsamattau.edu'.</p>
<p>Note also that</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
ProxyBlock *
</code></td></tr></table></blockquote>
<p>blocks connections to all sites.</p>
<hr/><h2><a name="ProxyDomain">ProxyDomain</a> <a name="proxydomain">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td/></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>ProxyDomain <em>Domain</em></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_proxy</td></tr></table></td></tr></table>
<p>This directive is only useful for Apache proxy servers within
intranets. The <code class="directive">ProxyDomain</code> directive specifies
the default domain which the apache proxy server will belong to. If a
request to a host without a domain name is encountered, a redirection
response to the same host with the configured <em>Domain</em> appended
will be generated.</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><p align="center"><strong>Example</strong></p><code>
ProxyRemote * http://firewall.mycompany.com:81<br>
NoProxy .mycompany.com 192.168.112.0/21<br>
ProxyDomain .mycompany.com
</code></td></tr></table></blockquote>
<hr/><h2><a name="ProxyErrorOverride">ProxyErrorOverride</a> <a name="proxyerroroverride">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td/></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>ProxyErrorOverride On|Off</td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>ProxyErrorOverride Off</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_proxy</td></tr><tr><td align="left" valign="top"><a href="directive-dict.html#Compatibility" class="help">Compatibility:</a></td><td>Available in version 2.0 and later</td></tr></table></td></tr></table>
<p>This directive is useful for reverse-proxy setups, where you want to
have a common look and feel on the error pages seen by the end user.
This also allows for included files (via mod_include's SSI) to get
the error code and act accordingly (default behavior would display
the error page of the proxied server, turning this on shows the SSI
Error message).</p>
<hr/><h2><a name="ProxyMaxForwards">ProxyMaxForwards</a> <a name="proxymaxforwards">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td/></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>ProxyMaxForwards <em>number</em></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>ProxyMaxForwards 10</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_proxy</td></tr><tr><td align="left" valign="top"><a href="directive-dict.html#Compatibility" class="help">Compatibility:</a></td><td>Available in Apache 2.0 and later</td></tr></table></td></tr></table>
<p>The <code class="directive">ProxyMaxForwards</code> directive specifies the
maximum number of proxies through which a request may pass. This is
set to prevent infinite proxy loops, or a DoS attack.</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><p align="center"><strong>Example</strong></p><code>
ProxyMaxForwards 10
</code></td></tr></table></blockquote>
<hr/><h2><a name="ProxyPass">ProxyPass</a> <a name="proxypass">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td/></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>ProxyPass [<em>path</em>] !|<em>url</em></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_proxy</td></tr></table></td></tr></table>
<p>This directive allows remote servers to be mapped into the space of
the local server; the local server does not act as a proxy in the
conventional sense, but appears to be a mirror of the remote
server. <em>path</em> is the name of a local virtual path;
<em>url</em> is a partial URL for the remote server.</p>
<p>Suppose the local server has address <code>http://wibble.org/</code>;
then</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
ProxyPass /mirror/foo/ http://foo.com/
</code></td></tr></table></blockquote>
<p>will cause a local request for the
<<code>http://wibble.org/mirror/foo/bar</code>> to be
internally converted into a proxy request to
<<code>http://foo.com/bar</code>>.</p>
<p>
The ! directive is useful in situations where you don't want to reverse-proxy
a subdirectory. eg.</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
ProxyPass /mirror/foo/i !<br>
ProxyPass /mirror/foo http://foo.com
</code></td></tr></table></blockquote>
<p>will proxy all requests to /mirror/foo to foo.com EXCEPT requests made to /mirror/foo/i</p>
<blockquote><table><tr><td bgcolor="#e0e5f5">NB: order is important. you need to put the exclusions BEFORE the general proxypass directive</td></tr></table></blockquote>
<hr/><h2><a name="ProxyPassReverse">ProxyPassReverse</a> <a name="proxypassreverse">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td/></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>ProxyPassReverse [<em>path</em>] <em>url</em></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_proxy</td></tr></table></td></tr></table>
<p>This directive lets Apache adjust the URL in the <code>Location</code>,
<code>Content-Location</code> and <code>URI</code> headers on
HTTP redirect responses. This is essential when Apache is used as
a reverse proxy to avoid by-passing the reverse proxy because of HTTP
redirects on the backend servers which stay behind the reverse proxy.</p>
<p><em>path</em> is the name of a local virtual path.<br>
<em>url</em> is a partial URL for the remote server - the same way they are
used for the <a href="#proxypass" class="directive"><code class="directive">ProxyPass</code></a> directive.</p>
<p>
Example:<br>
Suppose the local server has address <code>http://wibble.org/</code>; then</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
ProxyPass /mirror/foo/ http://foo.com/<br>
ProxyPassReverse /mirror/foo/ http://foo.com/
</code></td></tr></table></blockquote>
<p>will not only cause a local request for the
<<code>http://wibble.org/mirror/foo/bar</code>> to be internally
converted into a proxy request to <<code>http://foo.com/bar</code>> (the
functionality <code>ProxyPass</code> provides here). It also takes care of
redirects the server foo.com sends: when <code>http://foo.com/bar</code> is
redirected by him to <code>http://foo.com/quux</code> Apache adjusts this to
<code>http://wibble.org/mirror/foo/quux</code> before forwarding the HTTP
redirect response to the client. </p>
<p>
Note that this <code class="directive">ProxyPassReverse</code> directive can
also be used in conjunction with the proxy pass-through feature
("<code>RewriteRule ... [P]</code>") from
<code><a href="mod_rewrite.html">mod_rewrite</a></code> because its doesn't depend on a
corresponding <a href="#proxypass" class="directive"><code class="directive">ProxyPass</code></a>
directive.</p>
<hr/><h2><a name="ProxyPreserveHost">ProxyPreserveHost</a> <a name="proxypreservehost">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td/></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>ProxyPreserveHost on|off</td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>ProxyPreserveHost Off</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_proxy</td></tr><tr><td align="left" valign="top"><a href="directive-dict.html#Compatibility" class="help">Compatibility:</a></td><td>Available in
Apache 2.0.31 and later.</td></tr></table></td></tr></table>
<p>When enabled, this option will pass the Host: line from the
incoming request to the proxied host, instead of the hostname
specified in the proxypass line.
</p>
<p>This option should normally be turned 'off'.</p>
<hr/><h2><a name="ProxyReceiveBufferSize">ProxyReceiveBufferSize</a> <a name="proxyreceivebuffersize">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td/></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>ProxyReceiveBufferSize <em>bytes</em></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_proxy</td></tr></table></td></tr></table>
<p>The <code class="directive">ProxyReceiveBufferSize</code> directive
specifies an explicit network buffer size for outgoing HTTP and FTP
connections, for increased throughput. It has to be greater than 512
or set to 0 to indicate that the system's default buffer size should
be used.</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><p align="center"><strong>Example</strong></p><code>
ProxyReceiveBufferSize 2048
</code></td></tr></table></blockquote>
<hr/><h2><a name="ProxyRemote">ProxyRemote</a> <a name="proxyremote">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td/></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>ProxyRemote <em>match remote-server</em></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_proxy</td></tr></table></td></tr></table>
<p>This defines remote proxies to this proxy. <em>match</em> is either the
name of a URL-scheme that the remote server supports, or a partial URL
for which the remote server should be used, or '*' to indicate the
server should be contacted for all requests. <em>remote-server</em> is a
partial URL for the remote server. Syntax:</p>
<pre>
remote-server = protocol://hostname[:port]
</pre>
<p><em>protocol</em> is the protocol that should be used to communicate
with the remote server; only "http" is supported by this module.</p>
<p>
Example:</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
ProxyRemote http://goodguys.com/ http://mirrorguys.com:8000<br>
ProxyRemote * http://cleversite.com<br>
ProxyRemote ftp http://ftpproxy.mydomain.com:8080
</code></td></tr></table></blockquote>
<p>In the last example, the proxy will forward FTP requests, encapsulated
as yet another HTTP proxy request, to another proxy which can handle
them.</p>
<p>This option also supports reverse proxy configuration - a backend
webserver can be embedded within a virtualhost URL space even if that
server is hidden by another forward proxy.</p>
<hr/><h2><a name="ProxyRequests">ProxyRequests</a> <a name="proxyrequests">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td/></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>ProxyRequests on|off</td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>ProxyRequests Off</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_proxy</td></tr></table></td></tr></table>
<p>This allows or prevents Apache from functioning as a forward proxy
server. (Setting ProxyRequests to 'off' does not disable use of the
<a href="#proxypass" class="directive"><code class="directive">ProxyPass</code></a> directive.)</p>
<p>In a typical reverse proxy configuration, this option should be set to
'off'.</p>
<blockquote><table><tr><td bgcolor="#ffe5f5"><p>Do not enable proxying with <a href="#proxyrequests" class="directive"><code class="directive">ProxyRequests</code></a> until you have
<a href="#access">secured your server</a>. Open proxy servers are
dangerous both to your network and to the Internet at large.</p></td></tr></table></blockquote>
<hr/><h2><a name="ProxyTimeout">ProxyTimeout</a> <a name="proxytimeout">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td/></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>ProxyTimeout <em>seconds</em></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>ProxyTimeout 300</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_proxy</td></tr><tr><td align="left" valign="top"><a href="directive-dict.html#Compatibility" class="help">Compatibility:</a></td><td>Available in
Apache 2.0.31 and later</td></tr></table></td></tr></table>
<p>This directive allows a user to specifiy a timeout on proxy requests.
This is usefull when you have a slow/buggy appserver which hangs,
and you would rather just return a timeout and fail gracefully instead
of waiting however long it takes the server to return
</p>
<hr/><h2><a name="ProxyVia">ProxyVia</a> <a name="proxyvia">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td/></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>ProxyVia on|off|full|block</td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>ProxyVia off</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_proxy</td></tr></table></td></tr></table>
<p>This directive controls the use of the <code>Via:</code> HTTP
header by the proxy. Its intended use is to control the flow of of
proxy requests along a chain of proxy servers. See RFC2068 (HTTP/1.1)
for an explanation of <code>Via:</code> header lines.</p>
<ul> <li>If set
to <em>off</em>, which is the default, no special processing is
performed. If a request or reply contains a <code>Via:</code> header,
it is passed through unchanged.</li>
<li>If set to <em>on</em>, each
request and reply will get a <code>Via:</code> header line added for
the current host.</li>
<li>If set to <em>full</em>, each generated <code>Via:</code> header
line will additionally have the Apache server version shown as a
<code>Via:</code> comment field.</li>
<li>If set to <em>block</em>, every
proxy request will have all its <code>Via:</code> header lines
removed. No new <code>Via:</code> header will be generated.</li>
</ul>
<hr/></blockquote><h3 align="center">Apache HTTP Server Version 2.0</h3><a href="./"><img src="../images/index.gif" alt="Index"/></a><a href="../"><img src="../images/home.gif" alt="Home"/></a></body></html>
1.1 httpd-2.0/docs/manual/mod/mod_rewrite.html.en
Index: mod_rewrite.html.en
===================================================================
<html xmlns="http://www.w3.org/TR/xhtml1/strict"><head><!--
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
This file is generated from xml source: DO NOT EDIT
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
--><title>mod_rewrite- Apache HTTP Server</title><link href="../style/manual.css" type="text/css" rel="stylesheet"/></head><body><blockquote><div align="center"><img src="../images/sub.gif" alt="[APACHE DOCUMENTATION]"/><h3>Apache HTTP Server Version 2.0</h3></div><h1 align="center">Apache Module mod_rewrite</h1><table cellspacing="1" cellpadding="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td valign="top"><span class="help">Description:</span></td><td>Provides a rule-based rewriting engine to rewrite requested
URLs on the fly</td></tr><tr><td><a href="module-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="module-dict.html#ModuleIdentifier" class="help">Module Identifier:</a></td><td>rewrite_module</td></tr><tr><td align="left" valign="top"><a href="module-dict.html#Compatibility" class="help">Compatibility:</a></td><td><compatibility>Available in Apache 1.3 and later</compatibility></td></tr></table></td></tr></table><h2>Summary</h2>
<blockquote>
<em>``The great thing about mod_rewrite is it gives you
all the configurability and flexibility of Sendmail.
The downside to mod_rewrite is that it gives you all
the configurability and flexibility of Sendmail.''</em><br>
-- Brian Behlendorf<br>
Apache Group
</blockquote>
<blockquote>
<em>`` Despite the tons of examples and docs,
mod_rewrite is voodoo. Damned cool voodoo, but still
voodoo. ''</em> <br>
-- Brian Moore<br>
bem@news.cmc.net
</blockquote>
<p>Welcome to mod_rewrite, the Swiss Army Knife of URL
manipulation!</p>
<p>This module uses a rule-based rewriting engine (based on a
regular-expression parser) to rewrite requested URLs on the
fly. It supports an unlimited number of rules and an
unlimited number of attached rule conditions for each rule to
provide a really flexible and powerful URL manipulation
mechanism. The URL manipulations can depend on various tests,
for instance server variables, environment variables, HTTP
headers, time stamps and even external database lookups in
various formats can be used to achieve a really granular URL
matching.</p>
<p>This module operates on the full URLs (including the
path-info part) both in per-server context
(<code>httpd.conf</code>) and per-directory context
(<code>.htaccess</code>) and can even generate query-string
parts on result. The rewritten result can lead to internal
sub-processing, external request redirection or even to an
internal proxy throughput.</p>
<p>But all this functionality and flexibility has its
drawback: complexity. So don't expect to understand this
entire module in just one day.</p>
<p>This module was invented and originally written in April
1996 and gifted exclusively to the The Apache Group in July 1997
by</p>
<blockquote>
<a href="http://www.engelschall.com/"><code>Ralf S.
Engelschall</code></a><br>
<a href="mailto:rse@engelschall.com"><code>rse@engelschall.com</code></a><br>
<a href="http://www.engelschall.com/"><code>www.engelschall.com</code></a>
</blockquote>
<h2>Directives</h2><ul><li><a href="#rewritebase">RewriteBase</a></li><li><a href="#rewritecond">RewriteCond</a></li><li><a href="#rewriteengine">RewriteEngine</a></li><li><a href="#rewritelock">RewriteLock</a></li><li><a href="#rewritelog">RewriteLog</a></li><li><a href="#rewriteloglevel">RewriteLogLevel</a></li><li><a href="#rewritemap">RewriteMap</a></li><li><a href="#rewriteoptions">RewriteOptions</a></li><li><a href="#rewriterule">RewriteRule</a></li></ul><h2><a name="Internal">Interal Processing</a></h2>
<p>The internal processing of this module is very complex but
needs to be explained once even to the average user to avoid
common mistakes and to let you exploit its full
functionality.</p>
<h3><a name="InternalAPI">API Phases</a></h3>
<p>First you have to understand that when Apache processes a
HTTP request it does this in phases. A hook for each of these
phases is provided by the Apache API. Mod_rewrite uses two of
these hooks: the URL-to-filename translation hook which is
used after the HTTP request has been read but before any
authorization starts and the Fixup hook which is triggered
after the authorization phases and after the per-directory
config files (<code>.htaccess</code>) have been read, but
before the content handler is activated.</p>
<p>So, after a request comes in and Apache has determined the
corresponding server (or virtual server) the rewriting engine
starts processing of all mod_rewrite directives from the
per-server configuration in the URL-to-filename phase. A few
steps later when the final data directories are found, the
per-directory configuration directives of mod_rewrite are
triggered in the Fixup phase. In both situations mod_rewrite
rewrites URLs either to new URLs or to filenames, although
there is no obvious distinction between them. This is a usage
of the API which was not intended to be this way when the API
was designed, but as of Apache 1.x this is the only way
mod_rewrite can operate. To make this point more clear
remember the following two points:</p>
<ol>
<li>Although mod_rewrite rewrites URLs to URLs, URLs to
filenames and even filenames to filenames, the API
currently provides only a URL-to-filename hook. In Apache
2.0 the two missing hooks will be added to make the
processing more clear. But this point has no drawbacks for
the user, it is just a fact which should be remembered:
Apache does more in the URL-to-filename hook than the API
intends for it.</li>
<li>
Unbelievably mod_rewrite provides URL manipulations in
per-directory context, <em>i.e.</em>, within
<code>.htaccess</code> files, although these are reached
a very long time after the URLs have been translated to
filenames. It has to be this way because
<code>.htaccess</code> files live in the filesystem, so
processing has already reached this stage. In other
words: According to the API phases at this time it is too
late for any URL manipulations. To overcome this chicken
and egg problem mod_rewrite uses a trick: When you
manipulate a URL/filename in per-directory context
mod_rewrite first rewrites the filename back to its
corresponding URL (which is usually impossible, but see
the <code>RewriteBase</code> directive below for the
trick to achieve this) and then initiates a new internal
sub-request with the new URL. This restarts processing of
the API phases.
<p>Again mod_rewrite tries hard to make this complicated
step totally transparent to the user, but you should
remember here: While URL manipulations in per-server
context are really fast and efficient, per-directory
rewrites are slow and inefficient due to this chicken and
egg problem. But on the other hand this is the only way
mod_rewrite can provide (locally restricted) URL
manipulations to the average user.</p>
</li>
</ol>
<p>Don't forget these two points!</p>
<h3><a name="InternalRuleset">Ruleset Processing</a></h3>
<p>Now when mod_rewrite is triggered in these two API phases, it
reads the configured rulesets from its configuration
structure (which itself was either created on startup for
per-server context or during the directory walk of the Apache
kernel for per-directory context). Then the URL rewriting
engine is started with the contained ruleset (one or more
rules together with their conditions). The operation of the
URL rewriting engine itself is exactly the same for both
configuration contexts. Only the final result processing is
different. </p>
<p>The order of rules in the ruleset is important because the
rewriting engine processes them in a special (and not very
obvious) order. The rule is this: The rewriting engine loops
through the ruleset rule by rule (<a href="#rewriterule" class="directive"><code class="directive">RewriteRule</code></a> directives) and
when a particular rule matches it optionally loops through
existing corresponding conditions (<code>RewriteCond</code>
directives). For historical reasons the conditions are given
first, and so the control flow is a little bit long-winded. See
Figure 1 for more details.</p>
<h3/>
<img src="../images/mod_rewrite_fig1.gif" border="1" width="428" height="385" alt="[Needs graphics capability to display]">
<p><strong>Figure 1:</strong>The control flow through the rewriting ruleset</p>
<p>As you can see, first the URL is matched against the
<em>Pattern</em> of each rule. When it fails mod_rewrite
immediately stops processing this rule and continues with the
next rule. If the <em>Pattern</em> matches, mod_rewrite looks
for corresponding rule conditions. If none are present, it
just substitutes the URL with a new value which is
constructed from the string <em>Substitution</em> and goes on
with its rule-looping. But if conditions exist, it starts an
inner loop for processing them in the order that they are
listed. For conditions the logic is different: we don't match
a pattern against the current URL. Instead we first create a
string <em>TestString</em> by expanding variables,
back-references, map lookups, <em>etc.</em> and then we try
to match <em>CondPattern</em> against it. If the pattern
doesn't match, the complete set of conditions and the
corresponding rule fails. If the pattern matches, then the
next condition is processed until no more conditions are
available. If all conditions match, processing is continued
with the substitution of the URL with
<em>Substitution</em>.</p>
<h3><a name="quoting">Quoting Special Characters</a></h3>
<p>As of Apache 1.3.20, special characters in
<em>TestString</em> and <em>Substitution</em> strings can be
escaped (that is, treated as normal characters without their
usual special meaning) by prefixing them with a slosh ('\')
character. In other words, you can include an actual
dollar-sign character in a <em>Substitution</em> string by
using '<code>\$</code>'; this keeps mod_rewrite from trying
to treat it as a backreference.</p>
<h3><a name="InternalBackRefs">Regex Back-Reference Availability</a></h3>
<p>One important thing here has to be remembered: Whenever you
use parentheses in <em>Pattern</em> or in one of the
<em>CondPattern</em>, back-references are internally created
which can be used with the strings <code>$N</code> and
<code>%N</code> (see below). These are available for creating
the strings <em>Substitution</em> and <em>TestString</em>.
Figure 2 shows to which locations the back-references are
transfered for expansion.</p>
<h3/>
<img src="../images/mod_rewrite_fig2.gif" border="1" width="381" height="179" alt="[Needs graphics capability to display]">
<p><strong>Figure 2:</strong> The back-reference flow through a rule.</p>
<p>We know this was a crash course on mod_rewrite's internal
processing. But you will benefit from this knowledge when
reading the following documentation of the available
directives.</p>
<h2><a name="EnvVar">Environment Variables</a></h2>
<p>This module keeps track of two additional (non-standard)
CGI/SSI environment variables named <code>SCRIPT_URL</code>
and <code>SCRIPT_URI</code>. These contain the
<em>logical</em> Web-view to the current resource, while the
standard CGI/SSI variables <code>SCRIPT_NAME</code> and
<code>SCRIPT_FILENAME</code> contain the <em>physical</em>
System-view. </p>
<p>Notice: These variables hold the URI/URL <em>as they were
initially requested</em>, <em>i.e.</em>, <em>before</em> any
rewriting. This is important because the rewriting process is
primarily used to rewrite logical URLs to physical
pathnames.</p>
<p><strong>Example:</strong></p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
<pre>
SCRIPT_NAME=/sw/lib/w3s/tree/global/u/rse/.www/index.html
SCRIPT_FILENAME=/u/rse/.www/index.html
SCRIPT_URL=/u/rse/
SCRIPT_URI=http://en1.engelschall.com/u/rse/
</pre>
</code></td></tr></table></blockquote>
<h2><a name="Solutions">Practical Solutions</a></h2>
<p>We also have an <a href="../misc/rewriteguide.html">URL
Rewriting Guide</a> available, which provides a collection of
practical solutions for URL-based problems. There you can
find real-life rulesets and additional information about
mod_rewrite.</p>
<hr/><h2><a name="RewriteBase">RewriteBase</a> <a name="rewritebase">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Sets the base URL for per-directory rewrites</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>RewriteBase <em>URL-path</em></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>See usage for information.</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>FileInfo</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_rewrite</td></tr></table></td></tr></table>
<p>The <code class="directive">RewriteBase</code> directive explicitly
sets the base URL for per-directory rewrites. As you will see
below, <a href="#rewriterule" class="directive"><code class="directive">RewriteRule</code></a>
can be used in per-directory config files
(<code>.htaccess</code>). There it will act locally,
<em>i.e.</em>, the local directory prefix is stripped at this
stage of processing and your rewriting rules act only on the
remainder. At the end it is automatically added back to the
path. The default setting is; <code class="directive">RewriteBase</code> <em>physical-directory-path</em></p>
<p>When a substitution occurs for a new URL, this module has
to re-inject the URL into the server processing. To be able
to do this it needs to know what the corresponding URL-prefix
or URL-base is. By default this prefix is the corresponding
filepath itself. <strong>But at most websites URLs are NOT
directly related to physical filename paths, so this
assumption will usually be wrong!</strong> There you have to
use the <code>RewriteBase</code> directive to specify the
correct URL-prefix.</p>
<blockquote><table><tr><td bgcolor="#e0e5f5"> If your webserver's URLs are <strong>not</strong> directly
related to physical file paths, you have to use
<code class="directive">RewriteBase</code> in every <code>.htaccess</code>
files where you want to use <a href="#rewriterule" class="directive"><code class="directive">RewriteRule</code></a> directives.
</td></tr></table></blockquote>
<p> For example, assume the following per-directory config file:</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
<pre>
#
# /abc/def/.htaccess -- per-dir config file for directory /abc/def
# Remember: /abc/def is the physical path of /xyz, <em>i.e.</em>, the server
# has a 'Alias /xyz /abc/def' directive <em>e.g.</em>
#
RewriteEngine On
# let the server know that we were reached via /xyz and not
# via the physical path prefix /abc/def
RewriteBase /xyz
# now the rewriting rules
RewriteRule ^oldstuff\.html$ newstuff.html
</pre>
</code></td></tr></table></blockquote>
<p>In the above example, a request to
<code>/xyz/oldstuff.html</code> gets correctly rewritten to
the physical file <code>/abc/def/newstuff.html</code>.</p>
<blockquote><table><tr><td bgcolor="#e0e5f5"><p align="center"><strong>For Apache Hackers</strong></p>
<p>The following list gives detailed information about
the internal processing steps:</p>
<pre>
Request:
/xyz/oldstuff.html
Internal Processing:
/xyz/oldstuff.html -> /abc/def/oldstuff.html (per-server Alias)
/abc/def/oldstuff.html -> /abc/def/newstuff.html (per-dir RewriteRule)
/abc/def/newstuff.html -> /xyz/newstuff.html (per-dir RewriteBase)
/xyz/newstuff.html -> /abc/def/newstuff.html (per-server Alias)
Result:
/abc/def/newstuff.html
</pre>
<p>This seems very complicated but is
the correct Apache internal processing, because the
per-directory rewriting comes too late in the
process. So, when it occurs the (rewritten) request
has to be re-injected into the Apache kernel! BUT:
While this seems like a serious overhead, it really
isn't, because this re-injection happens fully
internally to the Apache server and the same
procedure is used by many other operations inside
Apache. So, you can be sure the design and
implementation is correct.</p>
</td></tr></table></blockquote>
<hr/><h2><a name="RewriteCond">RewriteCond</a> <a name="rewritecond">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Defines a condition under which rewriting will take place
</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td> RewriteCond
<em>TestString</em> <em>CondPattern</em></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>None</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host, directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>FileInfo</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_rewrite</td></tr></table></td></tr></table>
<p>The <code class="directive">RewriteCond</code> directive defines a
rule condition. Precede a <a href="#rewriterule" class="directive"><code class="directive">RewriteRule</code></a> directive with one
or more <code class="directive">RewriteCond</code> directives. The following
rewriting rule is only used if its pattern matches the current
state of the URI <strong>and</strong> if these additional
conditions apply too.</p>
<p><em>TestString</em> is a string which can contains the
following expanded constructs in addition to plain text:</p>
<ul>
<li>
<strong>RewriteRule backreferences</strong>: These are
backreferences of the form
<blockquote>
<strong><code>$N</code></strong>
</blockquote>
(0 <= N <= 9) which provide access to the grouped
parts (parenthesis!) of the pattern from the
corresponding <code>RewriteRule</code> directive (the one
following the current bunch of <code>RewriteCond</code>
directives).
</li>
<li>
<strong>RewriteCond backreferences</strong>: These are
backreferences of the form
<blockquote>
<strong><code>%N</code></strong>
</blockquote>
(1 <= N <= 9) which provide access to the grouped
parts (parentheses!) of the pattern from the last matched
<code>RewriteCond</code> directive in the current bunch
of conditions.
</li>
<li>
<strong>RewriteMap expansions</strong>: These are
expansions of the form
<blockquote>
<strong><code>${mapname:key|default}</code></strong>
</blockquote>
See <a href="#mapfunc">the documentation for
RewriteMap</a> for more details.
</li>
<li>
<strong>Server-Variables</strong>: These are variables of
the form
<blockquote>
<strong><code>%{</code> <em>NAME_OF_VARIABLE</em>
<code>}</code></strong>
</blockquote>
where <em>NAME_OF_VARIABLE</em> can be a string taken
from the following list:
<table bgcolor="#F0F0F0" cellspacing="0" cellpadding="5">
<tr>
<td>
<strong>HTTP headers:</strong>
<p>HTTP_USER_AGENT<br>
HTTP_REFERER<br>
HTTP_COOKIE<br>
HTTP_FORWARDED<br>
HTTP_HOST<br>
HTTP_PROXY_CONNECTION<br>
HTTP_ACCEPT<br>
</p>
</td>
<td>
<strong>connection & request:</strong>
<p>REMOTE_ADDR<br>
REMOTE_HOST<br>
REMOTE_USER<br>
REMOTE_IDENT<br>
REQUEST_METHOD<br>
SCRIPT_FILENAME<br>
PATH_INFO<br>
QUERY_STRING<br>
AUTH_TYPE<br>
</p>
</td>
</tr>
<tr>
<td>
<strong>server internals:</strong>
<p>DOCUMENT_ROOT<br>
SERVER_ADMIN<br>
SERVER_NAME<br>
SERVER_ADDR<br>
SERVER_PORT<br>
SERVER_PROTOCOL<br>
SERVER_SOFTWARE<br>
</p>
</td>
<td>
<strong>system stuff:</strong>
<p>TIME_YEAR<br>
TIME_MON<br>
TIME_DAY<br>
TIME_HOUR<br>
TIME_MIN<br>
TIME_SEC<br>
TIME_WDAY<br>
TIME<br>
</p>
</td>
<td>
<strong>specials:</strong>
<p>API_VERSION<br>
THE_REQUEST<br>
REQUEST_URI<br>
REQUEST_FILENAME<br>
IS_SUBREQ<br>
</p>
</td>
</tr>
</table>
<blockquote><table><tr><td bgcolor="#e0e5f5">
<p>These variables all
correspond to the similarly named HTTP
MIME-headers, C variables of the Apache server or
<code>struct tm</code> fields of the Unix system.
Most are documented elsewhere in the Manual or in
the CGI specification. Those that are special to
mod_rewrite include:</p>
<dl>
<dt><code>IS_SUBREQ</code></dt>
<dd>Will contain the text "true" if the request
currently being processed is a sub-request,
"false" otherwise. Sub-requests may be generated
by modules that need to resolve additional files
or URIs in order to complete their tasks.</dd>
<dt><code>API_VERSION</code></dt>
<dd>This is the version of the Apache module API
(the internal interface between server and
module) in the current httpd build, as defined in
include/ap_mmn.h. The module API version
corresponds to the version of Apache in use (in
the release version of Apache 1.3.14, for
instance, it is 19990320:10), but is mainly of
interest to module authors.</dd>
<dt><code>THE_REQUEST</code></dt>
<dd>The full HTTP request line sent by the
browser to the server (e.g., "<code>GET
/index.html HTTP/1.1</code>"). This does not
include any additional headers sent by the
browser.</dd>
<dt><code>REQUEST_URI</code></dt>
<dd>The resource requested in the HTTP request
line. (In the example above, this would be
"/index.html".)</dd>
<dt><code>REQUEST_FILENAME</code></dt>
<dd>The full local filesystem path to the file or
script matching the request.</dd>
</dl>
</td></tr></table></blockquote>
</li>
</ul>
<p>Special Notes:</p>
<ol>
<li>The variables SCRIPT_FILENAME and REQUEST_FILENAME
contain the same value, <em>i.e.</em>, the value of the
<code>filename</code> field of the internal
<code>request_rec</code> structure of the Apache server.
The first name is just the commonly known CGI variable name
while the second is the consistent counterpart to
REQUEST_URI (which contains the value of the
<code>uri</code> field of <code>request_rec</code>).</li>
<li>There is the special format:
<code>%{ENV:variable}</code> where <em>variable</em> can be
any environment variable. This is looked-up via internal
Apache structures and (if not found there) via
<code>getenv()</code> from the Apache server process.</li>
<li>There is the special format:
<code>%{HTTP:header}</code> where <em>header</em> can be
any HTTP MIME-header name. This is looked-up from the HTTP
request. Example: <code>%{HTTP:Proxy-Connection}</code> is
the value of the HTTP header
``<code>Proxy-Connection:</code>''.</li>
<li>There is the special format
<code>%{LA-U:variable}</code> for look-aheads which perform
an internal (URL-based) sub-request to determine the final
value of <em>variable</em>. Use this when you want to use a
variable for rewriting which is actually set later in an
API phase and thus is not available at the current stage.
For instance when you want to rewrite according to the
<code>REMOTE_USER</code> variable from within the
per-server context (<code>httpd.conf</code> file) you have
to use <code>%{LA-U:REMOTE_USER}</code> because this
variable is set by the authorization phases which come
<em>after</em> the URL translation phase where mod_rewrite
operates. On the other hand, because mod_rewrite implements
its per-directory context (<code>.htaccess</code> file) via
the Fixup phase of the API and because the authorization
phases come <em>before</em> this phase, you just can use
<code>%{REMOTE_USER}</code> there.</li>
<li>There is the special format:
<code>%{LA-F:variable}</code> which performs an internal
(filename-based) sub-request to determine the final value
of <em>variable</em>. Most of the time this is the same as
LA-U above.</li>
</ol>
<p><em>CondPattern</em> is the condition pattern,
<em>i.e.</em>, a regular expression which is applied to the
current instance of the <em>TestString</em>, <em>i.e.</em>,
<em>TestString</em> is evaluated and then matched against
<em>CondPattern</em>.</p>
<p><strong>Remember:</strong> <em>CondPattern</em> is a
standard <em>Extended Regular Expression</em> with some
additions:</p>
<ol>
<li>You can prefix the pattern string with a
'<code>!</code>' character (exclamation mark) to specify a
<strong>non</strong>-matching pattern.</li>
<li>
There are some special variants of <em>CondPatterns</em>.
Instead of real regular expression strings you can also
use one of the following:
<ul>
<li>'<strong><CondPattern</strong>' (is lexically
lower)<br>
Treats the <em>CondPattern</em> as a plain string and
compares it lexically to <em>TestString</em>. True if
<em>TestString</em> is lexically lower than
<em>CondPattern</em>.</li>
<li>'<strong>>CondPattern</strong>' (is lexically
greater)<br>
Treats the <em>CondPattern</em> as a plain string and
compares it lexically to <em>TestString</em>. True if
<em>TestString</em> is lexically greater than
<em>CondPattern</em>.</li>
<li>'<strong>=CondPattern</strong>' (is lexically
equal)<br>
Treats the <em>CondPattern</em> as a plain string and
compares it lexically to <em>TestString</em>. True if
<em>TestString</em> is lexically equal to
<em>CondPattern</em>, i.e the two strings are exactly
equal (character by character). If <em>CondPattern</em>
is just <code>""</code> (two quotation marks) this
compares <em>TestString</em> to the empty string.</li>
<li>'<strong>-d</strong>' (is
<strong>d</strong>irectory)<br>
Treats the <em>TestString</em> as a pathname and tests
if it exists and is a directory.</li>
<li>'<strong>-f</strong>' (is regular
<strong>f</strong>ile)<br>
Treats the <em>TestString</em> as a pathname and tests
if it exists and is a regular file.</li>
<li>'<strong>-s</strong>' (is regular file with
<strong>s</strong>ize)<br>
Treats the <em>TestString</em> as a pathname and tests
if it exists and is a regular file with size greater
than zero.</li>
<li>'<strong>-l</strong>' (is symbolic
<strong>l</strong>ink)<br>
Treats the <em>TestString</em> as a pathname and tests
if it exists and is a symbolic link.</li>
<li>'<strong>-F</strong>' (is existing file via
subrequest)<br>
Checks if <em>TestString</em> is a valid file and
accessible via all the server's currently-configured
access controls for that path. This uses an internal
subrequest to determine the check, so use it with care
because it decreases your servers performance!</li>
<li>'<strong>-U</strong>' (is existing URL via
subrequest)<br>
Checks if <em>TestString</em> is a valid URL and
accessible via all the server's currently-configured
access controls for that path. This uses an internal
subrequest to determine the check, so use it with care
because it decreases your server's performance!</li>
</ul>
<blockquote><table><tr><td bgcolor="#e0e5f5"><p align="center"><strong>Notice</strong></p>
All of these tests can
also be prefixed by an exclamation mark ('!') to
negate their meaning.
</td></tr></table></blockquote>
</li>
</ol>
<p>Additionally you can set special flags for
<em>CondPattern</em> by appending</p>
<blockquote>
<strong><code>[</code><em>flags</em><code>]</code></strong>
</blockquote>
<p>as the third argument to the <code>RewriteCond</code>
directive. <em>Flags</em> is a comma-separated list of the
following flags:</p>
<ul>
<li>'<strong><code>nocase|NC</code></strong>'
(<strong>n</strong>o <strong>c</strong>ase)<br>
This makes the test case-insensitive, <em>i.e.</em>, there
is no difference between 'A-Z' and 'a-z' both in the
expanded <em>TestString</em> and the <em>CondPattern</em>.
This flag is effective only for comparisons between
<em>TestString</em> and <em>CondPattern</em>. It has no
effect on filesystem and subrequest checks.</li>
<li>
'<strong><code>ornext|OR</code></strong>'
(<strong>or</strong> next condition)<br>
Use this to combine rule conditions with a local OR
instead of the implicit AND. Typical example:
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
<pre>
RewriteCond %{REMOTE_HOST} ^host1.* [OR]
RewriteCond %{REMOTE_HOST} ^host2.* [OR]
RewriteCond %{REMOTE_HOST} ^host3.*
RewriteRule ...some special stuff for any of these hosts...
</pre>
</code></td></tr></table></blockquote>
Without this flag you would have to write the cond/rule
three times.
</li>
</ul>
<p><strong>Example:</strong></p>
<p>To rewrite the Homepage of a site according to the
``<code>User-Agent:</code>'' header of the request, you can
use the following: </p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
<pre>
RewriteCond %{HTTP_USER_AGENT} ^Mozilla.*
RewriteRule ^/$ /homepage.max.html [L]
RewriteCond %{HTTP_USER_AGENT} ^Lynx.*
RewriteRule ^/$ /homepage.min.html [L]
RewriteRule ^/$ /homepage.std.html [L]
</pre>
</code></td></tr></table></blockquote>
<p>Interpretation: If you use Netscape Navigator as your
browser (which identifies itself as 'Mozilla'), then you
get the max homepage, which includes Frames, <em>etc.</em>
If you use the Lynx browser (which is Terminal-based), then
you get the min homepage, which contains no images, no
tables, <em>etc.</em> If you use any other browser you get
the standard homepage.</p>
<hr/><h2><a name="RewriteEngine">RewriteEngine</a> <a name="rewriteengine">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Enables or disables runtime rewriting engine</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>RewriteEngine on|off</td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>RewriteEngine off</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host, directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>FileInfo</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_rewrite</td></tr></table></td></tr></table>
<p>The <code class="directive">RewriteEngine</code> directive enables or
disables the runtime rewriting engine. If it is set to
<code>off</code> this module does no runtime processing at
all. It does not even update the <code>SCRIPT_URx</code>
environment variables.</p>
<p>Use this directive to disable the module instead of
commenting out all the <a href="#rewriterule" class="directive"><code class="directive">RewriteRule</code></a> directives!</p>
<p>Note that, by default, rewrite configurations are not
inherited. This means that you need to have a
<code>RewriteEngine on</code> directive for each virtual host
in which you wish to use it.</p>
<hr/><h2><a name="RewriteLock">RewriteLock</a> <a name="rewritelock">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Sets the name of the lock file used for RewriteMap
synchronization</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>RewriteLock <em>file-path</em></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>None</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_rewrite</td></tr></table></td></tr></table>
<p>This directive sets the filename for a synchronization
lockfile which mod_rewrite needs to communicate with <a href="#rewritemap" class="directive"><code class="directive">RewriteMap</code></a>
<em>programs</em>. Set this lockfile to a local path (not on a
NFS-mounted device) when you want to use a rewriting
map-program. It is not required for other types of rewriting
maps.</p>
<hr/><h2><a name="RewriteLog">RewriteLog</a> <a name="rewritelog">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Sets the name of the file used for logging rewrite engine
processing</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>RewriteLog <em>file-path</em></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_rewrite</td></tr></table></td></tr></table>
<p>The <code class="directive">RewriteLog</code> directive sets the name
of the file to which the server logs any rewriting actions it
performs. If the name does not begin with a slash
('<code>/</code>') then it is assumed to be relative to the
<em>Server Root</em>. The directive should occur only once per
server config.</p>
<blockquote><table><tr><td bgcolor="#e0e5f5"> To disable the logging of
rewriting actions it is not recommended to set
<em>Filename</em> to <code>/dev/null</code>, because
although the rewriting engine does not then output to a
logfile it still creates the logfile output internally.
<strong>This will slow down the server with no advantage
to the administrator!</strong> To disable logging either
remove or comment out the <code class="directive">RewriteLog</code>
directive or use <code>RewriteLogLevel 0</code>!
</td></tr></table></blockquote>
<blockquote><table><tr><td bgcolor="#e0e5f5"><p align="center"><strong>Security</strong></p>
See the <a href="../misc/security_tips.html">Apache Security Tips</a>
document for details on why your security could be compromised if the
directory where logfiles are stored is writable by anyone other than
the user that starts the server.
</td></tr></table></blockquote>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><p align="center"><strong>Example</strong></p><code>
RewriteLog "/usr/local/var/apache/logs/rewrite.log"
</code></td></tr></table></blockquote>
<hr/><h2><a name="RewriteLogLevel">RewriteLogLevel</a> <a name="rewriteloglevel">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Sets the verbosity of the log file used by the rewrite
engine</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>RewriteLogLevel <em>Level</em></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>RerwiteLogLevel 0</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_rewrite</td></tr></table></td></tr></table>
<p>The <code class="directive">RewriteLogLevel</code> directive sets the
verbosity level of the rewriting logfile. The default level 0
means no logging, while 9 or more means that practically all
actions are logged.</p>
<p>To disable the logging of rewriting actions simply set
<em>Level</em> to 0. This disables all rewrite action
logs.</p>
<blockquote><table><tr><td bgcolor="#e0e5f5"> Using a high value for
<em>Level</em> will slow down your Apache server
dramatically! Use the rewriting logfile at a
<em>Level</em> greater than 2 only for debugging!
</td></tr></table></blockquote>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><p align="center"><strong>Example</strong></p><code>
RewriteLogLevel 3
</code></td></tr></table></blockquote>
<hr/><h2><a name="RewriteMap">RewriteMap</a> <a name="rewritemap">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Defines a mapping function for key-lookup</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>RewriteMap <em>MapName</em> <em>MapType</em>:<em>MapSource</em>
</td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>None</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_rewrite</td></tr></table></td></tr></table>
<p>The <code class="directive">RewriteMap</code> directive defines a
<em>Rewriting Map</em> which can be used inside rule
substitution strings by the mapping-functions to
insert/substitute fields through a key lookup. The source of
this lookup can be of various types.</p>
<p>The <a id="mapfunc" name="mapfunc"><em>MapName</em></a> is
the name of the map and will be used to specify a
mapping-function for the substitution strings of a rewriting
rule via one of the following constructs:</p>
<blockquote>
<strong><code>${</code> <em>MapName</em> <code>:</code>
<em>LookupKey</em> <code>}</code><br>
<code>${</code> <em>MapName</em> <code>:</code>
<em>LookupKey</em> <code>|</code> <em>DefaultValue</em>
<code>}</code></strong>
</blockquote>
<p>When such a construct occurs the map <em>MapName</em> is
consulted and the key <em>LookupKey</em> is looked-up. If the
key is found, the map-function construct is substituted by
<em>SubstValue</em>. If the key is not found then it is
substituted by <em>DefaultValue</em> or by the empty string
if no <em>DefaultValue</em> was specified.</p>
<p>The following combinations for <em>MapType</em> and
<em>MapSource</em> can be used:</p>
<ul>
<li>
<strong>Standard Plain Text</strong><br>
MapType: <code>txt</code>, MapSource: Unix filesystem
path to valid regular file
<p>This is the standard rewriting map feature where the
<em>MapSource</em> is a plain ASCII file containing
either blank lines, comment lines (starting with a '#'
character) or pairs like the following - one per
line.</p>
<blockquote>
<strong><em>MatchingKey</em>
<em>SubstValue</em></strong>
</blockquote>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><p align="center"><strong>Example</strong></p><code>
<pre>
##
## map.txt -- rewriting map
##
Ralf.S.Engelschall rse # Bastard Operator From Hell
Mr.Joe.Average joe # Mr. Average
</pre>
</code></td></tr></table></blockquote>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
RewriteMap real-to-user txt:/path/to/file/map.txt
</code></td></tr></table></blockquote>
</li>
<li>
<strong>Randomized Plain Text</strong><br>
MapType: <code>rnd</code>, MapSource: Unix filesystem
path to valid regular file
<p>This is identical to the Standard Plain Text variant
above but with a special post-processing feature: After
looking up a value it is parsed according to contained
``<code>|</code>'' characters which have the meaning of
``or''. In other words they indicate a set of
alternatives from which the actual returned value is
chosen randomly. Although this sounds crazy and useless,
it was actually designed for load balancing in a reverse
proxy situation where the looked up values are server
names. Example:</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
<pre>
##
## map.txt -- rewriting map
##
static www1|www2|www3|www4
dynamic www5|www6
</pre>
</code></td></tr></table></blockquote>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
RewriteMap servers rnd:/path/to/file/map.txt
</code></td></tr></table></blockquote>
</li>
<li>
<strong>Hash File</strong><br>
MapType: <code>dbm</code>, MapSource: Unix filesystem
path to valid regular file
<p>Here the source is a binary NDBM format file
containing the same contents as a <em>Plain Text</em>
format file, but in a special representation which is
optimized for really fast lookups. You can create such a
file with any NDBM tool or with the following Perl
script:</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
<pre>
#!/path/to/bin/perl
##
## txt2dbm -- convert txt map to dbm format
##
use NDBM_File;
use Fcntl;
($txtmap, $dbmmap) = @ARGV;
open(TXT, "<$txtmap") or die "Couldn't open $txtmap!\n";
tie (%DB, 'NDBM_File', $dbmmap,O_RDWR|O_TRUNC|O_CREAT, 0644) or die "Couldn't create $dbmmap!\n";
while (<TXT>) {
next if (/^\s*#/ or /^\s*$/);
$DB{$1} = $2 if (/^\s*(\S+)\s+(\S+)/);
}
untie %DB;
close(TXT);
</pre>
</code></td></tr></table></blockquote>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
$ txt2dbm map.txt map.db
</code></td></tr></table></blockquote>
</li>
<li>
<strong>Internal Function</strong><br>
MapType: <code>int</code>, MapSource: Internal Apache
function
<p>Here the source is an internal Apache function.
Currently you cannot create your own, but the following
functions already exists:</p>
<ul>
<li><strong>toupper</strong>:<br>
Converts the looked up key to all upper case.</li>
<li><strong>tolower</strong>:<br>
Converts the looked up key to all lower case.</li>
<li><strong>escape</strong>:<br>
Translates special characters in the looked up key to
hex-encodings.</li>
<li><strong>unescape</strong>:<br>
Translates hex-encodings in the looked up key back to
special characters.</li>
</ul>
</li>
<li>
<strong>External Rewriting Program</strong><br>
MapType: <code>prg</code>, MapSource: Unix filesystem
path to valid regular file
<p>Here the source is a program, not a map file. To
create it you can use the language of your choice, but
the result has to be a executable (<em>i.e.</em>, either
object-code or a script with the magic cookie trick
'<code>#!/path/to/interpreter</code>' as the first
line).</p>
<p>This program is started once at startup of the Apache
servers and then communicates with the rewriting engine
over its <code>stdin</code> and <code>stdout</code>
file-handles. For each map-function lookup it will
receive the key to lookup as a newline-terminated string
on <code>stdin</code>. It then has to give back the
looked-up value as a newline-terminated string on
<code>stdout</code> or the four-character string
``<code>NULL</code>'' if it fails (<em>i.e.</em>, there
is no corresponding value for the given key). A trivial
program which will implement a 1:1 map (<em>i.e.</em>,
key == value) could be:</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
<pre>
#!/usr/bin/perl
$| = 1;
while (<STDIN>) {
# ...put here any transformations or lookups...
print $_;
}
</pre>
</code></td></tr></table></blockquote>
<p>But be very careful:</p>
<ol>
<li>``<em>Keep it simple, stupid</em>'' (KISS), because
if this program hangs it will hang the Apache server
when the rule occurs.</li>
<li>Avoid one common mistake: never do buffered I/O on
<code>stdout</code>! This will cause a deadloop! Hence
the ``<code>$|=1</code>'' in the above example...</li>
<li>Use the <a href="#rewritelock" class="directive"><code class="directive">RewriteLock</code></a> directive to
define a lockfile mod_rewrite can use to synchronize the
communication to the program. By default no such
synchronization takes place.</li>
</ol>
</li>
</ul>
<p>The <code class="directive">RewriteMap</code> directive can occur more than
once. For each mapping-function use one
<code class="directive">RewriteMap</code> directive to declare its rewriting
mapfile. While you cannot <strong>declare</strong> a map in
per-directory context it is of course possible to
<strong>use</strong> this map in per-directory context. </p>
<blockquote><table><tr><td bgcolor="#e0e5f5"><p align="center"><strong>Note</strong></p> For plain text and DBM format files the
looked-up keys are cached in-core until the <code>mtime</code> of the
mapfile changes or the server does a restart. This way you can have
map-functions in rules which are used for <strong>every</strong>
request. This is no problem, because the external lookup only happens
once!
</td></tr></table></blockquote>
<hr/><h2><a name="RewriteOptions">RewriteOptions</a> <a name="rewriteoptions">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Sets some special options for the rewrite engine</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>RewriteOptions <em>Options</em></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>None</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host, directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_rewrite</td></tr></table></td></tr></table>
<p>The <code class="directive">RewriteOptions</code> directive sets some
special options for the current per-server or per-directory
configuration. The <em>Option</em> strings can be one of the
following:</p>
<ul>
<li>'<strong><code>inherit</code></strong>'<br>
This forces the current configuration to inherit the
configuration of the parent. In per-virtual-server context
this means that the maps, conditions and rules of the main
server are inherited. In per-directory context this means
that conditions and rules of the parent directory's
<code>.htaccess</code> configuration are inherited.</li>
</ul>
<hr/><h2><a name="RewriteRule">RewriteRule</a> <a name="rewriterule">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Defines rules for the rewriting engine</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>RewriteRule
<em>Pattern</em> <em>Substitution</em></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>None</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host, directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>FileInfo</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_rewrite</td></tr></table></td></tr></table>
<p>The <code class="directive">RewriteRule</code> directive is the real
rewriting workhorse. The directive can occur more than once.
Each directive then defines one single rewriting rule. The
<strong>definition order</strong> of these rules is
<strong>important</strong>, because this order is used when
applying the rules at run-time.</p>
<p><a id="patterns" name="patterns"><em>Pattern</em></a> can
be (for Apache 1.1.x a System V8 and for Apache 1.2.x and
later a POSIX) <a id="regexp" name="regexp">regular
expression</a> which gets applied to the current URL. Here
``current'' means the value of the URL when this rule gets
applied. This may not be the originally requested URL,
because any number of rules may already have matched and made
alterations to it.</p>
<p>Some hints about the syntax of regular expressions:</p>
<table bgcolor="#F0F0F0" cellspacing="0" cellpadding="5">
<tr>
<td>
<pre>
<strong>Text:</strong>
<strong><code>.</code></strong> Any single character
<strong><code>[</code></strong>chars<strong><code>]</code></strong> Character class: One of chars
<strong><code>[^</code></strong>chars<strong><code>]</code></strong> Character class: None of chars
text1<strong><code>|</code></strong>text2 Alternative: text1 or text2
<strong>Quantifiers:</strong>
<strong><code>?</code></strong> 0 or 1 of the preceding text
<strong><code>*</code></strong> 0 or N of the preceding text (N > 0)
<strong><code>+</code></strong> 1 or N of the preceding text (N > 1)
<strong>Grouping:</strong>
<strong><code>(</code></strong>text<strong><code>)</code></strong> Grouping of text
(either to set the borders of an alternative or
for making backreferences where the <strong>N</strong>th group can
be used on the RHS of a RewriteRule with <code>$</code><strong>N</strong>)
<strong>Anchors:</strong>
<strong><code>^</code></strong> Start of line anchor
<strong><code>$</code></strong> End of line anchor
<strong>Escaping:</strong>
<strong><code>\</code></strong>char escape that particular char
(for instance to specify the chars "<code>.[]()</code>" <em>etc.</em>)
</pre>
</td>
</tr>
</table>
<p>For more information about regular expressions either have
a look at your local regex(3) manpage or its
<code>src/regex/regex.3</code> copy in the Apache 1.3
distribution. If you are interested in more detailed
information about regular expressions and their variants
(POSIX regex, Perl regex, <em>etc.</em>) have a look at the
following dedicated book on this topic:</p>
<blockquote>
<em>Mastering Regular Expressions</em><br>
Jeffrey E.F. Friedl<br>
Nutshell Handbook Series<br>
O'Reilly & Associates, Inc. 1997<br>
ISBN 1-56592-257-3<br>
</blockquote>
<p>Additionally in mod_rewrite the NOT character
('<code>!</code>') is a possible pattern prefix. This gives
you the ability to negate a pattern; to say, for instance:
``<em>if the current URL does <strong>NOT</strong> match this
pattern</em>''. This can be used for exceptional cases, where
it is easier to match the negative pattern, or as a last
default rule.</p>
<blockquote><table><tr><td bgcolor="#e0e5f5"><p align="center"><strong>Notice</strong></p>
When using the NOT character
to negate a pattern you cannot have grouped wildcard
parts in the pattern. This is impossible because when the
pattern does NOT match, there are no contents for the
groups. In consequence, if negated patterns are used, you
cannot use <code>$N</code> in the substitution
string!
</td></tr></table></blockquote>
<p><a id="rhs" name="rhs"><em>Substitution</em></a> of a
rewriting rule is the string which is substituted for (or
replaces) the original URL for which <em>Pattern</em>
matched. Beside plain text you can use</p>
<ol>
<li>back-references <code>$N</code> to the RewriteRule
pattern</li>
<li>back-references <code>%N</code> to the last matched
RewriteCond pattern</li>
<li>server-variables as in rule condition test-strings
(<code>%{VARNAME}</code>)</li>
<li><a href="#mapfunc">mapping-function</a> calls
(<code>${mapname:key|default}</code>)</li>
</ol>
<p>Back-references are <code>$</code><strong>N</strong>
(<strong>N</strong>=0..9) identifiers which will be replaced
by the contents of the <strong>N</strong>th group of the
matched <em>Pattern</em>. The server-variables are the same
as for the <em>TestString</em> of a <code>RewriteCond</code>
directive. The mapping-functions come from the
<code>RewriteMap</code> directive and are explained there.
These three types of variables are expanded in the order of
the above list. </p>
<p>As already mentioned above, all the rewriting rules are
applied to the <em>Substitution</em> (in the order of
definition in the config file). The URL is <strong>completely
replaced</strong> by the <em>Substitution</em> and the
rewriting process goes on until there are no more rules
unless explicitly terminated by a
<code><strong>L</strong></code> flag - see below.</p>
<p>There is a special substitution string named
'<code>-</code>' which means: <strong>NO
substitution</strong>! Sounds silly? No, it is useful to
provide rewriting rules which <strong>only</strong> match
some URLs but do no substitution, <em>e.g.</em>, in
conjunction with the <strong>C</strong> (chain) flag to be
able to have more than one pattern to be applied before a
substitution occurs.</p>
<p>One more note: You can even create URLs in the
substitution string containing a query string part. Just use
a question mark inside the substitution string to indicate
that the following stuff should be re-injected into the
QUERY_STRING. When you want to erase an existing query
string, end the substitution string with just the question
mark.</p>
<blockquote><table><tr><td bgcolor="#e0e5f5"><p align="center"><strong>Note</strong></p>
There is a special feature:
When you prefix a substitution field with
<code>http://</code><em>thishost</em>[<em>:thisport</em>]
then <strong>mod_rewrite</strong> automatically strips it
out. This auto-reduction on implicit external redirect
URLs is a useful and important feature when used in
combination with a mapping-function which generates the
hostname part. Have a look at the first example in the
example section below to understand this.
</td></tr></table></blockquote>
<blockquote><table><tr><td bgcolor="#e0e5f5"><p align="center"><strong>Remember</strong></p>
An unconditional external
redirect to your own server will not work with the prefix
<code>http://thishost</code> because of this feature. To
achieve such a self-redirect, you have to use the
<strong>R</strong>-flag (see below).
</td></tr></table></blockquote>
<p>Additionally you can set special flags for
<em>Substitution</em> by appending</p>
<blockquote>
<strong><code>[</code><em>flags</em><code>]</code></strong>
</blockquote>
<p>
as the third argument to the <code>RewriteRule</code>
directive. <em>Flags</em> is a comma-separated list of the
following flags: </p>
<ul>
<li>
'<strong><code>redirect|R</code>
[=<em>code</em>]</strong>' (force <a id="redirect" name="redirect"><strong>r</strong>edirect</a>)<br>
Prefix <em>Substitution</em> with
<code>http://thishost[:thisport]/</code> (which makes the
new URL a URI) to force a external redirection. If no
<em>code</em> is given a HTTP response of 302 (MOVED
TEMPORARILY) is used. If you want to use other response
codes in the range 300-400 just specify them as a number
or use one of the following symbolic names:
<code>temp</code> (default), <code>permanent</code>,
<code>seeother</code>. Use it for rules which should
canonicalize the URL and give it back to the client,
<em>e.g.</em>, translate ``<code>/~</code>'' into
``<code>/u/</code>'' or always append a slash to
<code>/u/</code><em>user</em>, etc.<br>
<p><strong>Note:</strong> When you use this flag, make
sure that the substitution field is a valid URL! If not,
you are redirecting to an invalid location! And remember
that this flag itself only prefixes the URL with
<code>http://thishost[:thisport]/</code>, rewriting
continues. Usually you also want to stop and do the
redirection immediately. To stop the rewriting you also
have to provide the 'L' flag.</p>
</li>
<li>'<strong><code>forbidden|F</code></strong>' (force URL
to be <strong>f</strong>orbidden)<br>
This forces the current URL to be forbidden,
<em>i.e.</em>, it immediately sends back a HTTP response of
403 (FORBIDDEN). Use this flag in conjunction with
appropriate RewriteConds to conditionally block some
URLs.</li>
<li>'<strong><code>gone|G</code></strong>' (force URL to be
<strong>g</strong>one)<br>
This forces the current URL to be gone, <em>i.e.</em>, it
immediately sends back a HTTP response of 410 (GONE). Use
this flag to mark pages which no longer exist as gone.</li>
<li>
'<strong><code>proxy|P</code></strong>' (force
<strong>p</strong>roxy)<br>
This flag forces the substitution part to be internally
forced as a proxy request and immediately (<em>i.e.</em>,
rewriting rule processing stops here) put through the <a href="mod_proxy.html">proxy module</a>. You have to make
sure that the substitution string is a valid URI
(<em>e.g.</em>, typically starting with
<code>http://</code><em>hostname</em>) which can be
handled by the Apache proxy module. If not you get an
error from the proxy module. Use this flag to achieve a
more powerful implementation of the <a href="mod_proxy.html#proxypass">ProxyPass</a> directive,
to map some remote stuff into the namespace of the local
server.
<p>Notice: To use this functionality make sure you have
the proxy module compiled into your Apache server
program. If you don't know please check whether
<code>mod_proxy.c</code> is part of the ``<code>httpd
-l</code>'' output. If yes, this functionality is
available to mod_rewrite. If not, then you first have to
rebuild the ``<code>httpd</code>'' program with mod_proxy
enabled.</p>
</li>
<li>'<strong><code>last|L</code></strong>'
(<strong>l</strong>ast rule)<br>
Stop the rewriting process here and don't apply any more
rewriting rules. This corresponds to the Perl
<code>last</code> command or the <code>break</code> command
from the C language. Use this flag to prevent the currently
rewritten URL from being rewritten further by following
rules. For example, use it to rewrite the root-path URL
('<code>/</code>') to a real one, <em>e.g.</em>,
'<code>/e/www/</code>'.</li>
<li>'<strong><code>next|N</code></strong>'
(<strong>n</strong>ext round)<br>
Re-run the rewriting process (starting again with the
first rewriting rule). Here the URL to match is again not
the original URL but the URL from the last rewriting rule.
This corresponds to the Perl <code>next</code> command or
the <code>continue</code> command from the C language. Use
this flag to restart the rewriting process, <em>i.e.</em>,
to immediately go to the top of the loop.<br>
<strong>But be careful not to create an infinite
loop!</strong></li>
<li>'<strong><code>chain|C</code></strong>'
(<strong>c</strong>hained with next rule)<br>
This flag chains the current rule with the next rule
(which itself can be chained with the following rule,
<em>etc.</em>). This has the following effect: if a rule
matches, then processing continues as usual, <em>i.e.</em>,
the flag has no effect. If the rule does
<strong>not</strong> match, then all following chained
rules are skipped. For instance, use it to remove the
``<code>.www</code>'' part inside a per-directory rule set
when you let an external redirect happen (where the
``<code>.www</code>'' part should not to occur!).</li>
<li>
'<strong><code>type|T</code></strong>=<em>MIME-type</em>'
(force MIME <strong>t</strong>ype)<br>
Force the MIME-type of the target file to be
<em>MIME-type</em>. For instance, this can be used to
simulate the <code>mod_alias</code> directive
<code>ScriptAlias</code> which internally forces all files
inside the mapped directory to have a MIME type of
``<code>application/x-httpd-cgi</code>''.</li>
<li>
'<strong><code>nosubreq|NS</code></strong>' (used only if
<strong>n</strong>o internal
<strong>s</strong>ub-request)<br>
This flag forces the rewriting engine to skip a
rewriting rule if the current request is an internal
sub-request. For instance, sub-requests occur internally
in Apache when <code>mod_include</code> tries to find out
information about possible directory default files
(<code>index.xxx</code>). On sub-requests it is not
always useful and even sometimes causes a failure to if
the complete set of rules are applied. Use this flag to
exclude some rules.<br>
<p>Use the following rule for your decision: whenever you
prefix some URLs with CGI-scripts to force them to be
processed by the CGI-script, the chance is high that you
will run into problems (or even overhead) on
sub-requests. In these cases, use this flag.</p>
</li>
<li>'<strong><code>nocase|NC</code></strong>'
(<strong>n</strong>o <strong>c</strong>ase)<br>
This makes the <em>Pattern</em> case-insensitive,
<em>i.e.</em>, there is no difference between 'A-Z' and
'a-z' when <em>Pattern</em> is matched against the current
URL.</li>
<li>'<strong><code>qsappend|QSA</code></strong>'
(<strong>q</strong>uery <strong>s</strong>tring
<strong>a</strong>ppend)<br>
This flag forces the rewriting engine to append a query
string part in the substitution string to the existing one
instead of replacing it. Use this when you want to add more
data to the query string via a rewrite rule.</li>
<li>
'<strong><code>noescape|NE</code></strong>'
(<strong>n</strong>o URI <strong>e</strong>scaping of
output)<br>
This flag keeps mod_rewrite from applying the usual URI
escaping rules to the result of a rewrite. Ordinarily,
special characters (such as '%', '$', ';', and so on)
will be escaped into their hexcode equivalents ('%25',
'%24', and '%3B', respectively); this flag prevents this
from being done. This allows percent symbols to appear in
the output, as in
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
RewriteRule /foo/(.*) /bar?arg=P1\%3d$1 [R,NE]
</code></td></tr></table></blockquote>
which would turn '<code>/foo/zed</code>' into a safe
request for '<code>/bar?arg=P1=zed</code>'.
</li>
<li>
'<strong><code>passthrough|PT</code></strong>'
(<strong>p</strong>ass <strong>t</strong>hrough to next
handler)<br>
This flag forces the rewriting engine to set the
<code>uri</code> field of the internal
<code>request_rec</code> structure to the value of the
<code>filename</code> field. This flag is just a hack to
be able to post-process the output of
<code>RewriteRule</code> directives by
<code>Alias</code>, <code>ScriptAlias</code>,
<code>Redirect</code>, <em>etc.</em> directives from
other URI-to-filename translators. A trivial example to
show the semantics: If you want to rewrite
<code>/abc</code> to <code>/def</code> via the rewriting
engine of <code>mod_rewrite</code> and then
<code>/def</code> to <code>/ghi</code> with
<code>mod_alias</code>:
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
RewriteRule ^/abc(.*) /def$1 [PT]<br>
Alias /def /ghi
</code></td></tr></table></blockquote>
If you omit the <code>PT</code> flag then
<code>mod_rewrite</code> will do its job fine,
<em>i.e.</em>, it rewrites <code>uri=/abc/...</code> to
<code>filename=/def/...</code> as a full API-compliant
URI-to-filename translator should do. Then
<code>mod_alias</code> comes and tries to do a
URI-to-filename transition which will not work.
<p>Note: <strong>You have to use this flag if you want to
intermix directives of different modules which contain
URL-to-filename translators</strong>. The typical example
is the use of <code>mod_alias</code> and
<code>mod_rewrite</code>..</p>
<blockquote><table><tr><td bgcolor="#e0e5f5"><p align="center"><strong>For Apache hackers</strong></p>
If the current Apache API had a filename-to-filename
hook additionally to the URI-to-filename hook then we
wouldn't need this flag! But without such a hook this
flag is the only solution. The Apache Group has
discussed this problem and will add such a hook in
Apache version 2.0.
</td></tr></table></blockquote>
</li>
<li>'<strong><code>skip|S</code></strong>=<em>num</em>'
(<strong>s</strong>kip next rule(s))<br>
This flag forces the rewriting engine to skip the next
<em>num</em> rules in sequence when the current rule
matches. Use this to make pseudo if-then-else constructs:
The last rule of the then-clause becomes
<code>skip=N</code> where N is the number of rules in the
else-clause. (This is <strong>not</strong> the same as the
'chain|C' flag!)</li>
<li>
'<strong><code>env|E=</code></strong><em>VAR</em>:<em>VAL</em>'
(set <strong>e</strong>nvironment variable)<br>
This forces an environment variable named <em>VAR</em> to
be set to the value <em>VAL</em>, where <em>VAL</em> can
contain regexp backreferences <code>$N</code> and
<code>%N</code> which will be expanded. You can use this
flag more than once to set more than one variable. The
variables can be later dereferenced in many situations, but
usually from within XSSI (via <code><!--#echo
var="VAR"--></code>) or CGI (<em>e.g.</em>
<code>$ENV{'VAR'}</code>). Additionally you can dereference
it in a following RewriteCond pattern via
<code>%{ENV:VAR}</code>. Use this to strip but remember
information from URLs.</li>
</ul>
<blockquote><table><tr><td bgcolor="#e0e5f5"><p align="center"><strong>Note</strong></p> Never forget that <em>Pattern</em> is
applied to a complete URL in per-server configuration
files. <strong>But in per-directory configuration files, the
per-directory prefix (which always is the same for a specific
directory!) is automatically <em>removed</em> for the pattern matching
and automatically <em>added</em> after the substitution has been
done.</strong> This feature is essential for many sorts of rewriting,
because without this prefix stripping you have to match the parent
directory which is not always possible.
<p>There is one exception: If a substitution string
starts with ``<code>http://</code>'' then the directory
prefix will <strong>not</strong> be added and an
external redirect or proxy throughput (if flag
<strong>P</strong> is used!) is forced!</p>
</td></tr></table></blockquote>
<blockquote><table><tr><td bgcolor="#e0e5f5"><p align="center"><strong>Note</strong></p>
To enable the rewriting engine
for per-directory configuration files you need to set
``<code>RewriteEngine On</code>'' in these files
<strong>and</strong> ``<code>Options
FollowSymLinks</code>'' must be enabled. If your
administrator has disabled override of
<code>FollowSymLinks</code> for a user's directory, then
you cannot use the rewriting engine. This restriction is
needed for security reasons.
</td></tr></table></blockquote>
<p>Here are all possible substitution combinations and their
meanings:</p>
<p><strong>Inside per-server configuration
(<code>httpd.conf</code>)<br>
for request ``<code>GET
/somepath/pathinfo</code>'':</strong><br>
</p>
<table bgcolor="#F0F0F0" cellspacing="0" cellpadding="5">
<tr>
<td>
<pre>
<strong>Given Rule</strong> <strong>Resulting Substitution</strong>
---------------------------------------------- ----------------------------------
^/somepath(.*) otherpath$1 not supported, because invalid!
^/somepath(.*) otherpath$1 [R] not supported, because invalid!
^/somepath(.*) otherpath$1 [P] not supported, because invalid!
---------------------------------------------- ----------------------------------
^/somepath(.*) /otherpath$1 /otherpath/pathinfo
^/somepath(.*) /otherpath$1 [R] http://thishost/otherpath/pathinfo
via external redirection
^/somepath(.*) /otherpath$1 [P] not supported, because silly!
---------------------------------------------- ----------------------------------
^/somepath(.*) http://thishost/otherpath$1 /otherpath/pathinfo
^/somepath(.*) http://thishost/otherpath$1 [R] http://thishost/otherpath/pathinfo
via external redirection
^/somepath(.*) http://thishost/otherpath$1 [P] not supported, because silly!
---------------------------------------------- ----------------------------------
^/somepath(.*) http://otherhost/otherpath$1 http://otherhost/otherpath/pathinfo
via external redirection
^/somepath(.*) http://otherhost/otherpath$1 [R] http://otherhost/otherpath/pathinfo
via external redirection
(the [R] flag is redundant)
^/somepath(.*) http://otherhost/otherpath$1 [P] http://otherhost/otherpath/pathinfo
via internal proxy
</pre>
</td>
</tr>
</table>
<p><strong>Inside per-directory configuration for
<code>/somepath</code><br>
(<em>i.e.</em>, file <code>.htaccess</code> in dir
<code>/physical/path/to/somepath</code> containing
<code>RewriteBase /somepath</code>)<br>
for request ``<code>GET
/somepath/localpath/pathinfo</code>'':</strong><br>
</p>
<table bgcolor="#F0F0F0" cellspacing="0" cellpadding="5">
<tr>
<td>
<pre>
<strong>Given Rule</strong> <strong>Resulting Substitution</strong>
---------------------------------------------- ----------------------------------
^localpath(.*) otherpath$1 /somepath/otherpath/pathinfo
^localpath(.*) otherpath$1 [R] http://thishost/somepath/otherpath/pathinfo
via external redirection
^localpath(.*) otherpath$1 [P] not supported, because silly!
---------------------------------------------- ----------------------------------
^localpath(.*) /otherpath$1 /otherpath/pathinfo
^localpath(.*) /otherpath$1 [R] http://thishost/otherpath/pathinfo
via external redirection
^localpath(.*) /otherpath$1 [P] not supported, because silly!
---------------------------------------------- ----------------------------------
^localpath(.*) http://thishost/otherpath$1 /otherpath/pathinfo
^localpath(.*) http://thishost/otherpath$1 [R] http://thishost/otherpath/pathinfo
via external redirection
^localpath(.*) http://thishost/otherpath$1 [P] not supported, because silly!
---------------------------------------------- ----------------------------------
^localpath(.*) http://otherhost/otherpath$1 http://otherhost/otherpath/pathinfo
via external redirection
^localpath(.*) http://otherhost/otherpath$1 [R] http://otherhost/otherpath/pathinfo
via external redirection
(the [R] flag is redundant)
^localpath(.*) http://otherhost/otherpath$1 [P] http://otherhost/otherpath/pathinfo
via internal proxy
</pre>
</td>
</tr>
</table>
<p><strong>Example:</strong></p>
<p>We want to rewrite URLs of the form </p>
<blockquote>
<code>/</code> <em>Language</em> <code>/~</code>
<em>Realname</em> <code>/.../</code> <em>File</em>
</blockquote>
<p>into </p>
<blockquote>
<code>/u/</code> <em>Username</em> <code>/.../</code>
<em>File</em> <code>.</code> <em>Language</em>
</blockquote>
<p>We take the rewrite mapfile from above and save it under
<code>/path/to/file/map.txt</code>. Then we only have to
add the following lines to the Apache server configuration
file:</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
<pre>
RewriteLog /path/to/file/rewrite.log
RewriteMap real-to-user txt:/path/to/file/map.txt
RewriteRule ^/([^/]+)/~([^/]+)/(.*)$ /u/${real-to-user:$2|nobody}/$3.$1
</pre>
</code></td></tr></table></blockquote>
<hr/></blockquote><h3 align="center">Apache HTTP Server Version 2.0</h3><a href="./"><img src="../images/index.gif" alt="Index"/></a><a href="../"><img src="../images/home.gif" alt="Home"/></a></body></html>
1.1 httpd-2.0/docs/manual/mod/mod_setenvif.html.en
Index: mod_setenvif.html.en
===================================================================
<html xmlns="http://www.w3.org/TR/xhtml1/strict"><head><!--
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
This file is generated from xml source: DO NOT EDIT
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
--><title>mod_setenvif- Apache HTTP Server</title><link href="../style/manual.css" type="text/css" rel="stylesheet"/></head><body><blockquote><div align="center"><img src="../images/sub.gif" alt="[APACHE DOCUMENTATION]"/><h3>Apache HTTP Server Version 2.0</h3></div><h1 align="center">Apache Module mod_setenvif</h1><table cellspacing="1" cellpadding="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td valign="top"><span class="help">Description:</span></td><td>Allows the setting of environment variables based
on characteristics of the request</td></tr><tr><td><a href="module-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="module-dict.html#ModuleIdentifier" class="help">Module Identifier:</a></td><td>setenvif_module</td></tr><tr><td align="left" valign="top"><a href="module-dict.html#Compatibility" class="help">Compatibility:</a></td><td><compatibility>Available in Apache 1.3 and later</compatibility></td></tr></table></td></tr></table><h2>Summary</h2>
<p>The <code><a href="mod_setenvif.html">mod_setenvif</a></code> module allows you to set
environment variables according to whether different aspects of
the request match regular expressions you specify. These
environment variables can be used by other parts of the server
to make decisions about actions to be taken.</p>
<p>The directives are considered in the order they appear in
the configuration files. So more complex sequences can be used,
such as this example, which sets <code>netscape</code> if the
browser is mozilla but not MSIE.</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
BrowserMatch ^Mozilla netscape<br>
BrowserMatch MSIE !netscape<br>
</code></td></tr></table></blockquote>
<h2>Directives</h2><ul><li><a href="#browsermatch">BrowserMatch</a></li><li><a href="#browsermatchnocase">BrowserMatchNoCase</a></li><li><a href="#setenvif">SetEnvIf</a></li><li><a href="#setenvifnocase">SetEnvIfNoCase</a></li></ul><p><strong>See also </strong></p><ul><li><a href="../env.html">Environment Variables in Apache</a></li></ul><hr/><h2><a name="BrowserMatch">BrowserMatch</a> <a name="browsermatch">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Sets environment variables conditional on HTTP User-Agent
</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>BrowserMatch <em>regex env-variable</em>[=<em>value</em>]
[<em>env-variable</em>[=<em>value</em>]] ...</td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host, directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>FileInfo</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_setenvif</td></tr><tr><td align="left" valign="top"><a href="directive-dict.html#Compatibility" class="help">Compatibility:</a></td><td>Apache 1.2 and
above (in Apache 1.2 this directive was found in the
now-obsolete mod_browser module)</td></tr></table></td></tr></table>
<p>The <code class="directive">BrowserMatch</code> directive defines
environment variables based on the <code>User-Agent</code> HTTP
request header field. The first argument should be a POSIX.2
extended regular expression (similar to an
<code>egrep</code>-style regex). The rest of the arguments give
the names of variables to set, and optionally values to which they
should be set. These take the form of</p>
<ol>
<li><code><em>varname</em></code>, or</li>
<li><code>!<em>varname</em></code>, or</li>
<li><code><em>varname</em>=<em>value</em></code></li>
</ol>
<p>In the first form, the value will be set to "1". The second
will remove the given variable if already defined, and the
third will set the variable to the value given by
<code><em>value</em></code>. If a <code>User-Agent</code>
string matches more than one entry, they will be merged.
Entries are processed in the order in which they appear, and
later entries can override earlier ones.</p>
<p>For example:</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
BrowserMatch ^Mozilla forms jpeg=yes browser=netscape<br>
BrowserMatch "^Mozilla/[2-3]" tables agif frames javascript<br>
BrowserMatch MSIE !javascript<br>
</code></td></tr></table></blockquote>
<p>Note that the regular expression string is
<strong>case-sensitive</strong>. For case-INsensitive matching,
see the <a href="#browsermatchnocase" class="directive"><code class="directive">BrowserMatchNoCase</code></a>
directive.</p>
<p>The <code class="directive">BrowserMatch</code> and
<code class="directive">BrowserMatchNoCase</code> directives are special cases of
the <a href="#setenvif" class="directive"><code class="directive">SetEnvIf</code></a> and <a href="#setenvifnocase" class="directive"><code class="directive">SetEnvIfNoCase</code></a>
directives. The following two lines have the same effect:</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
BrowserMatchNoCase Robot is_a_robot<br>
SetEnvIfNoCase User-Agent Robot is_a_robot<br>
</code></td></tr></table></blockquote>
<hr/><h2><a name="BrowserMatchNoCase">BrowserMatchNoCase</a> <a name="browsermatchnocase">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Sets environment variables conditional on User-Agent without
respect to case</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>BrowserMatchNoCase <em>regex env-variable</em>[=<em>value</em>]
[<em>env-variable</em>[=<em>value</em>]] ...</td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host, directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>FileInfo</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_setenvif</td></tr><tr><td align="left" valign="top"><a href="directive-dict.html#Compatibility" class="help">Compatibility:</a></td><td>Apache 1.2 and
above (in Apache 1.2 this directive was found in the
now-obsolete mod_browser module)</td></tr></table></td></tr></table>
<p>The <code class="directive">BrowserMatchNoCase</code> directive is
semantically identical to the <a href="#browsermatch" class="directive"><code class="directive">BrowserMatch</code></a> directive.
However, it provides for case-insensitive matching. For
example:</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
BrowserMatchNoCase mac platform=macintosh<br>
BrowserMatchNoCase win platform=windows<br>
</code></td></tr></table></blockquote>
<p>The <code class="directive">BrowserMatch</code> and
<code class="directive">BrowserMatchNoCase</code> directives are special cases of
the <a href="#setenvif" class="directive"><code class="directive">SetEnvIf</code></a> and <a href="#setenvifnocase" class="directive"><code class="directive">SetEnvIfNoCase</code></a>
directives. The following two lines have the same effect:</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
BrowserMatchNoCase Robot is_a_robot<br>
SetEnvIfNoCase User-Agent Robot is_a_robot<br>
</code></td></tr></table></blockquote>
<hr/><h2><a name="SetEnvIf">SetEnvIf</a> <a name="setenvif">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Sets environment variables based on attributes of the request
</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>SetEnvIf <em>attribute
regex env-variable</em>[=<em>value</em>]
[<em>env-variable</em>[=<em>value</em>]] ...</td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host, directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>FileInfo</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_setenvif</td></tr><tr><td align="left" valign="top"><a href="directive-dict.html#Compatibility" class="help">Compatibility:</a></td><td>Apache 1.3 and
above; the Request_Protocol keyword and environment-variable
matching are only available with 1.3.7 and later</td></tr></table></td></tr></table>
<p>The <code class="directive">SetEnvIf</code> directive defines environment
variables based on attributes of the request. These attributes
can be the values of various HTTP request header fields (see <a href="http://www.rfc-editor.org/rfc/rfc2616.txt">RFC2616</a>
for more information about these), or of other aspects of the
request, including the following:</p>
<ul>
<li><code>Remote_Host</code> - the hostname (if available) of
the client making the request</li>
<li><code>Remote_Addr</code> - the IP address of the client
making the request</li>
<li><code>Remote_User</code> - the authenticated username (if
available)</li>
<li><code>Request_Method</code> - the name of the method
being used (<code>GET</code>, <code>POST</code>, <em>et
cetera</em>)</li>
<li><code>Request_Protocol</code> - the name and version of
the protocol with which the request was made (<em>e.g.</em>,
"HTTP/0.9", "HTTP/1.1", <em>etc.</em>)</li>
<li><code>Request_URI</code> - the portion of the URL
following the scheme and host portion</li>
</ul>
<p>Some of the more commonly used request header field names
include <code>Host</code>, <code>User-Agent</code>, and
<code>Referer</code>.</p>
<p>If the <em>attribute</em> name doesn't match any of the
special keywords, nor any of the request's header field names,
it is tested as the name of an environment variable in the list
of those associated with the request. This allows
<code class="directive">SetEnvIf</code> directives to test against the result of
prior matches.</p>
<blockquote><table><tr><td bgcolor="#e0e5f5">
<strong>Only those environment variables defined by earlier
<code>SetEnvIf[NoCase]</code> directives are available for
testing in this manner. 'Earlier' means that they were
defined at a broader scope (such as server-wide) or
previously in the current directive's scope.</strong>
</td></tr></table></blockquote>
<p><em>attribute</em> may be a regular expression when used to
match a request header. If <em>attribute</em> is a regular
expression and it doesn't match any of the request's header
names, then <em>attribute</em> is not tested against the
request's environment variable list.</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><p align="center"><strong>Example:</strong></p><code>
SetEnvIf Request_URI "\.gif$" object_is_image=gif<br>
SetEnvIf Request_URI "\.jpg$" object_is_image=jpg<br>
SetEnvIf Request_URI "\.xbm$" object_is_image=xbm<br>
:<br>
SetEnvIf Referer www\.mydomain\.com intra_site_referral<br>
:<br>
SetEnvIf object_is_image xbm XBIT_PROCESSING=1<br>
:<br>
SetEnvIf ^TS* ^[a-z].* HAVE_TS<br>
</code></td></tr></table></blockquote>
<p>The first three will set the environment variable
<code>object_is_image</code> if the request was for an image
file, and the fourth sets <code>intra_site_referral</code> if
the referring page was somewhere on the
<code>www.mydomain.com</code> Web site.</p>
<p>The last example will set environment variable
<code>HAVE_TS</code> if the request contains any headers that
begin with "TS" whose values begins with any character in the
set [a-z].</p>
<hr/><h2><a name="SetEnvIfNoCase">SetEnvIfNoCase</a> <a name="setenvifnocase">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Sets environment variables based on attributes of the request
without respect to case</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>SetEnvIfNoCase <em>attribute regex env-variable</em>[=<em>value</em>]
[<em>env-variable</em>[=<em>value</em>]] ...</td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host, directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>FileInfo</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_setenvif</td></tr><tr><td align="left" valign="top"><a href="directive-dict.html#Compatibility" class="help">Compatibility:</a></td><td>Apache 1.3 and above</td></tr></table></td></tr></table>
<p>The <code class="directive">SetEnvIfNoCase</code> is semantically identical to
the <a href="#setenvif" class="directive"><code class="directive">SetEnvIf</code></a> directive,
and differs only in that the regular expression matching is
performed in a case-insensitive manner. For example:</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
SetEnvIfNoCase Host Apache\.Org site=apache
</code></td></tr></table></blockquote>
<p>This will cause the <code>site</code> environment variable
to be set to "<code>apache</code>" if the HTTP request header
field <code>Host:</code> was included and contained
<code>Apache.Org</code>, <code>apache.org</code>, or any other
combination.</p>
<hr/></blockquote><h3 align="center">Apache HTTP Server Version 2.0</h3><a href="./"><img src="../images/index.gif" alt="Index"/></a><a href="../"><img src="../images/home.gif" alt="Home"/></a></body></html>
1.1 httpd-2.0/docs/manual/mod/mod_so.html.en
Index: mod_so.html.en
===================================================================
<html xmlns="http://www.w3.org/TR/xhtml1/strict"><head><!--
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
This file is generated from xml source: DO NOT EDIT
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
--><title>mod_so- Apache HTTP Server</title><link href="../style/manual.css" type="text/css" rel="stylesheet"/></head><body><blockquote><div align="center"><img src="../images/sub.gif" alt="[APACHE DOCUMENTATION]"/><h3>Apache HTTP Server Version 2.0</h3></div><h1 align="center">Apache Module mod_so</h1><table cellspacing="1" cellpadding="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td valign="top"><span class="help">Description:</span></td><td>
This module provides for loading of executable code and
modules into the server at start-up or restart time.
</td></tr><tr><td><a href="module-dict.html#Status" class="help">Status:</a></td><td>Base (Windows>; Optional (Unix)</td></tr><tr><td><a href="module-dict.html#ModuleIdentifier" class="help">Module Identifier:</a></td><td>so_module</td></tr><tr><td align="left" valign="top"><a href="module-dict.html#Compatibility" class="help">Compatibility:</a></td><td><compatibility>Available in Apache 1.3 and later.</compatibility></td></tr></table></td></tr></table><h2>Summary</h2>
<p>On selected operating systems this module can be used to
load modules into Apache at runtime via the <a href="../dso.html">Dynamic Shared Object</a> (DSO) mechanism,
rather than requiring a recompilation.</p>
<p>On Unix, the loaded code typically comes from shared object
files (usually with <code>.so</code> extension), on Windows
this may either the <code>.so</code> or <code>.dll</code>
extension. This module is only available in Apache 1.3 and
up.</p>
<p>In previous releases, the functionality of this module was
provided for Unix by mod_dld, and for Windows by mod_dll. On
Windows, mod_dll was used in beta release 1.3b1 through 1.3b5.
mod_so combines these two modules into a single module for all
operating systems.</p>
<blockquote><table><tr><td bgcolor="#ffe5f5"><p align="center"><strong>Warning</strong></p>
<p>Apache 1.3 modules cannot be directly used
with Apache 2.0 - the module must be modified to dynamically
load or compile into Apache 2.0.</p>
</td></tr></table></blockquote>
<h2>Directives</h2><ul><li><a href="#loadfile">LoadFile</a></li><li><a href="#loadmodule">LoadModule</a></li></ul><h2>Creating Loadable Modules for Windows</h2>
<blockquote><table><tr><td bgcolor="#e0e5f5"><p align="center"><strong>Note</strong></p>
<p>The module name format changed for Windows
with Apache 1.3.15 and 2.0 - the modules are now named as
mod_foo.so</p>
<p>While mod_so still loads modules with
ApacheModuleFoo.dll names, the new naming convention is
preferred; if you are converting your loadable module for 2.0,
please fix the name to this 2.0 convention.</p></td></tr></table></blockquote>
<p>The Apache module API is unchanged between the Unix and
Windows versions. Many modules will run on Windows with no or
little change from Unix, although others rely on aspects of the
Unix architecture which are not present in Windows, and will
not work.</p>
<p>When a module does work, it can be added to the server in
one of two ways. As with Unix, it can be compiled into the
server. Because Apache for Windows does not have the
<code>Configure</code> program of Apache for Unix, the module's
source file must be added to the ApacheCore project file, and
its symbols must be added to the
<code>os\win32\modules.c</code> file.</p>
<p>The second way is to compile the module as a DLL, a shared
library that can be loaded into the server at runtime, using
the <code><code class="directive">LoadModule</code></code>
directive. These module DLLs can be distributed and run on any
Apache for Windows installation, without recompilation of the
server.</p>
<p>To create a module DLL, a small change is necessary to the
module's source file: The module record must be exported from
the DLL (which will be created later; see below). To do this,
add the <code>AP_MODULE_DECLARE_DATA</code> (defined in the
Apache header files) to your module's module record definition.
For example, if your module has:</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
module foo_module;
</code></td></tr></table></blockquote>
<p>Replace the above with:</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
module AP_MODULE_DECLARE_DATA foo_module;
</code></td></tr></table></blockquote>
<p>Note that this will only be activated on Windows, so the
module can continue to be used, unchanged, with Unix if needed.
Also, if you are familiar with <code>.DEF</code> files, you can
export the module record with that method instead.</p>
<p>Now, create a DLL containing your module. You will need to
link this against the libhttpd.lib export library that is
created when the libhttpd.dll shared library is compiled. You
may also have to change the compiler settings to ensure that
the Apache header files are correctly located. You can find
this library in your server root's modules directory. It is
best to grab an existing module .dsp file from the tree to
assure the build environment is configured correctly, or
alternately compare the compiler and link options to your
.dsp.</p>
<p>This should create a DLL version of your module. Now simply
place it in the <code>modules</code> directory of your server
root, and use the <code class="directive">LoadModule</code>
directive to load it.</p>
<hr/><h2><a name="LoadFile">LoadFile</a> <a name="loadfile">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Link in the named object file or library</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>LoadFile <em>filename</em> [<em>filename</em>] ...</td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>none</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Base (Windows>; Optional (Unix)</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_so</td></tr></table></td></tr></table>
<p>The LoadFile directive links in the named object files or
libraries when the server is started or restarted; this is used
to load additional code which may be required for some module
to work. <em>Filename</em> is either an absolute path or
relative to <a href="core.html#serverroot">ServerRoot</a>.</p>
<p>For example:</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>LoadFile libexex/libxmlparse.so</code></td></tr></table></blockquote>
<hr/><h2><a name="LoadModule">LoadModule</a> <a name="loadmodule">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Links in the object file or library, and adds to the list
of active modules</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>LoadModule <em>module filename</em></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>none</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Base (Windows>; Optional (Unix)</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_so</td></tr></table></td></tr></table>
<p>The LoadModule directive links in the object file or library
<em>filename</em> and adds the module structure named
<em>module</em> to the list of active modules. <em>Module</em>
is the name of the external variable of type
<code>module</code> in the file, and is listed as the <a href="module-dict.html#ModuleIdentifier">Module Identifier</a>
in the module documentation. Example:</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
LoadModule status_module modules/mod_status.so
</code></td></tr></table></blockquote>
<p>loads the named module from the modules subdirectory of the
ServerRoot.</p>
<hr/></blockquote><h3 align="center">Apache HTTP Server Version 2.0</h3><a href="./"><img src="../images/index.gif" alt="Index"/></a><a href="../"><img src="../images/home.gif" alt="Home"/></a></body></html>
1.1 httpd-2.0/docs/manual/mod/mod_speling.html.en
Index: mod_speling.html.en
===================================================================
<html xmlns="http://www.w3.org/TR/xhtml1/strict"><head><!--
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
This file is generated from xml source: DO NOT EDIT
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
--><title>mod_speling- Apache HTTP Server</title><link href="../style/manual.css" type="text/css" rel="stylesheet"/></head><body><blockquote><div align="center"><img src="../images/sub.gif" alt="[APACHE DOCUMENTATION]"/><h3>Apache HTTP Server Version 2.0</h3></div><h1 align="center">Apache Module mod_speling</h1><table cellspacing="1" cellpadding="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td valign="top"><span class="help">Description:</span></td><td>Attempts to correct mistaken URLs that
users might have entered by ignoring capitalization and by
allowing up to one misspelling</td></tr><tr><td><a href="module-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="module-dict.html#ModuleIdentifier" class="help">Module Identifier:</a></td><td>speling_module</td></tr></table></td></tr></table><h2>Summary</h2>
<p>Requests to documents sometimes cannot be served by the core
apache server because the request was misspelled or
miscapitalized. This module addresses this problem by trying to
find a matching document, even after all other modules gave up.
It does its work by comparing each document name in the
requested directory against the requested document name
<strong>without regard to case</strong>, and allowing
<strong>up to one misspelling</strong> (character insertion /
omission / transposition or wrong character). A list is built
with all document names which were matched using this
strategy.</p>
<p>If, after scanning the directory,</p>
<ul>
<li>no matching document was found, Apache will proceed as
usual and return a "document not found" error.</li>
<li>only one document is found that "almost" matches the
request, then it is returned in the form of a redirection
response.</li>
<li>more than one document with a close match was found, then
the list of the matches is returned to the client, and the
client can select the correct candidate.</li>
</ul>
<h2>Directives</h2><ul><li><a href="#checkspelling">CheckSpelling</a></li></ul><hr/><h2><a name="CheckSpelling">CheckSpelling</a> <a name="checkspelling">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Enables the spelling
module</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>CheckSpelling on|off</td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>CheckSpelling Off</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host, directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>Options</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_speling</td></tr><tr><td align="left" valign="top"><a href="directive-dict.html#Compatibility" class="help">Compatibility:</a></td><td>CheckSpelling was available as a separately available
module for Apache 1.1, but was limited to miscapitalizations. As
of Apache 1.3, it is part of the Apache distribution. Prior to Apache
1.3.2, the CheckSpelling directive was only available in the
"server" and "virtual host" contexts.</td></tr></table></td></tr></table>
<p>This directive enables or disables the spelling module. When
enabled, keep in mind that</p>
<ul>
<li>the directory scan which is necessary for the spelling
correction will have an impact on the server's performance
when many spelling corrections have to be performed at the
same time.</li>
<li>the document trees should not contain sensitive files
which could be matched inadvertently by a spelling
"correction".</li>
<li>the module is unable to correct misspelled user names (as
in <code>http://my.host/~apahce/</code>), just file names or
directory names.</li>
<li>spelling corrections apply strictly to existing files, so
a request for the <code><Location /status></code> may
get incorrectly treated as the negotiated file
"<code>/stats.html</code>".</li>
</ul>
<hr/></blockquote><h3 align="center">Apache HTTP Server Version 2.0</h3><a href="./"><img src="../images/index.gif" alt="Index"/></a><a href="../"><img src="../images/home.gif" alt="Home"/></a></body></html>
1.1 httpd-2.0/docs/manual/mod/mod_ssl.html.en
Index: mod_ssl.html.en
===================================================================
<html xmlns="http://www.w3.org/TR/xhtml1/strict"><head><!--
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
This file is generated from xml source: DO NOT EDIT
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
--><title>mod_ssl- Apache HTTP Server</title><link href="../style/manual.css" type="text/css" rel="stylesheet"/></head><body><blockquote><div align="center"><img src="../images/sub.gif" alt="[APACHE DOCUMENTATION]"/><h3>Apache HTTP Server Version 2.0</h3></div><h1 align="center">Apache Module mod_ssl</h1><table cellspacing="1" cellpadding="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td valign="top"><span class="help">Description:</span></td><td>Strong cryptography using the Secure Sockets
Layer (SSL) and Transport Layer Security (TLS) protocols</td></tr><tr><td><a href="module-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="module-dict.html#ModuleIdentifier" class="help">Module Identifier:</a></td><td>ssl_module</td></tr></table></td></tr></table><h2>Summary</h2>
<p>This module provides SSL v2/v3 and TLS v1 support for the Apache
HTTP Server. It was contributed by Ralf S. Engeschall based on his
mod_ssl project and originally derived from work by Ben Laurie.</p>
<p>This module relies on <a href="http://www.openssl.org/">OpenSSL</a>
to provide the cryptography engine.</p>
<p>Further details, discussion, and examples are provided in the
<a href="../ssl/">SSL documentation</a>.</p>
<h2>Directives</h2><ul><li><a href="#sslcacertificatefile">SSLCACertificateFile</a></li><li><a href="#sslcacertificatepath">SSLCACertificatePath</a></li><li><a href="#sslcarevocationfile">SSLCARevocationFile</a></li><li><a href="#sslcarevocationpath">SSLCARevocationPath</a></li><li><a href="#sslcertificatechainfile">SSLCertificateChainFile</a></li><li><a href="#sslcertificatefile">SSLCertificateFile</a></li><li><a href="#sslcertificatekeyfile">SSLCertificateKeyFile</a></li><li><a href="#sslciphersuite">SSLCipherSuite</a></li><li><a href="#sslengine">SSLEngine</a></li><li><a href="#sslmutex">SSLMutex</a></li><li><a href="#ssloptions">SSLOptions</a></li><li><a href="#sslpassphrasedialog">SSLPassPhraseDialog</a></li><li><a href="#sslprotocol">SSLProtocol</a></li><li><a href="#sslrandomseed">SSLRandomSeed</a></li><li><a href="#sslrequire">SSLRequire</a></li><li><a href="#sslrequiressl">SSLRequireSSL</a></li><li><a href="#sslsessioncache">SSLSessionCache</a></li><li><a href="#sslsessioncachetimeout">SSLSessionCacheTimeout</a></li><li><a href="#sslverifyclient">SSLVerifyClient</a></li><li><a href="#sslverifydepth">SSLVerifyDepth</a></li></ul><h2>Environment Variables</h2>
<p>This module provides a lot of SSL information as additional environment
variables to the SSI and CGI namespace. The generated variables are listed in
the table below. For backward compatibility the information can
be made available under different names, too. Look in the <a href="../ssl/ssl_compat.html">Compatibility</a> chapter for details on the
compatibility variables.</p>
<table width="600" cellspacing="0" cellpadding="1" border="0" summary="">
<tr><td bgcolor="#cccccc">
<table width="598" cellpadding="5" cellspacing="0" border="0" summary="">
<tr><td bgcolor="#ffffff">
<table border="0" cellspacing="0" cellpadding="2" width="598" summary="">
<tr>
<td><strong>Variable Name:</strong></td>
<td><strong>Value Type:</strong></td>
<td><strong>Description:</strong></td>
</tr>
<tr><td><code>HTTPS</code></td> <td>flag</td> <td>HTTPS is being used.</td></tr>
<tr><td><code>SSL_PROTOCOL</code></td> <td>string</td> <td>The SSL protocol version (SSLv2, SSLv3, TLSv1)</td></tr>
<tr><td><code>SSL_SESSION_ID</code></td> <td>string</td> <td>The hex-encoded SSL session id</td></tr>
<tr><td><code>SSL_CIPHER</code></td> <td>string</td> <td>The cipher specification name</td></tr>
<tr><td><code>SSL_CIPHER_EXPORT</code></td> <td>string</td> <td><code>true</code> if cipher is an export cipher</td></tr>
<tr><td><code>SSL_CIPHER_USEKEYSIZE</code></td> <td>number</td> <td>Number of cipher bits (actually used)</td></tr>
<tr><td><code>SSL_CIPHER_ALGKEYSIZE</code></td> <td>number</td> <td>Number of cipher bits (possible)</td></tr>
<tr><td><code>SSL_VERSION_INTERFACE</code></td> <td>string</td> <td>The mod_ssl program version</td></tr>
<tr><td><code>SSL_VERSION_LIBRARY</code></td> <td>string</td> <td>The OpenSSL program version</td></tr>
<tr><td><code>SSL_CLIENT_M_VERSION</code></td> <td>string</td> <td>The version of the client certificate</td></tr>
<tr><td><code>SSL_CLIENT_M_SERIAL</code></td> <td>string</td> <td>The serial of the client certificate</td></tr>
<tr><td><code>SSL_CLIENT_S_DN</code></td> <td>string</td> <td>Subject DN in client's certificate</td></tr>
<tr><td><code>SSL_CLIENT_S_DN_</code><em>x509</em></td> <td>string</td> <td>Component of client's Subject DN</td></tr>
<tr><td><code>SSL_CLIENT_I_DN</code></td> <td>string</td> <td>Issuer DN of client's certificate</td></tr>
<tr><td><code>SSL_CLIENT_I_DN_</code><em>x509</em></td> <td>string</td> <td>Component of client's Issuer DN</td></tr>
<tr><td><code>SSL_CLIENT_V_START</code></td> <td>string</td> <td>Validity of client's certificate (start time)</td></tr>
<tr><td><code>SSL_CLIENT_V_END</code></td> <td>string</td> <td>Validity of client's certificate (end time)</td></tr>
<tr><td><code>SSL_CLIENT_A_SIG</code></td> <td>string</td> <td>Algorithm used for the signature of client's certificate</td></tr>
<tr><td><code>SSL_CLIENT_A_KEY</code></td> <td>string</td> <td>Algorithm used for the public key of client's certificate</td></tr>
<tr><td><code>SSL_CLIENT_CERT</code></td> <td>string</td> <td>PEM-encoded client certificate</td></tr>
<tr><td><code>SSL_CLIENT_CERT_CHAIN</code><em>n</em></td> <td>string</td> <td>PEM-encoded certificates in client certificate chain</td></tr>
<tr><td><code>SSL_CLIENT_VERIFY</code></td> <td>string</td> <td><code>NONE</code>, <code>SUCCESS</code>, <code>GENEROUS</code> or <code>FAILED:</code><em>reason</em></td></tr>
<tr><td><code>SSL_SERVER_M_VERSION</code></td> <td>string</td> <td>The version of the server certificate</td></tr>
<tr><td><code>SSL_SERVER_M_SERIAL</code></td> <td>string</td> <td>The serial of the server certificate</td></tr>
<tr><td><code>SSL_SERVER_S_DN</code></td> <td>string</td> <td>Subject DN in server's certificate</td></tr>
<tr><td><code>SSL_SERVER_S_DN_</code><em>x509</em></td> <td>string</td> <td>Component of server's Subject DN</td></tr>
<tr><td><code>SSL_SERVER_I_DN</code></td> <td>string</td> <td>Issuer DN of server's certificate</td></tr>
<tr><td><code>SSL_SERVER_I_DN_</code><em>x509</em></td> <td>string</td> <td>Component of server's Issuer DN</td></tr>
<tr><td><code>SSL_SERVER_V_START</code></td> <td>string</td> <td>Validity of server's certificate (start time)</td></tr>
<tr><td><code>SSL_SERVER_V_END</code></td> <td>string</td> <td>Validity of server's certificate (end time)</td></tr>
<tr><td><code>SSL_SERVER_A_SIG</code></td> <td>string</td> <td>Algorithm used for the signature of server's certificate</td></tr>
<tr><td><code>SSL_SERVER_A_KEY</code></td> <td>string</td> <td>Algorithm used for the public key of server's certificate</td></tr>
<tr><td><code>SSL_SERVER_CERT</code></td> <td>string</td> <td>PEM-encoded server certificate</td></tr>
</table>
[ where <em>x509</em> is a component of a X.509 DN:
<code>C,ST,L,O,OU,CN,T,I,G,S,D,UID,Email</code> ]
</td>
</tr></table>
</td></tr></table>
<h2>Custom Log Formats</h2>
<p>When <code><a href="mod_ssl.html">mod_ssl</a></code> is built into Apache or at least
loaded (under DSO situation) additional functions exist for the <a href="../mod_log_config.html#formats">Custom Log Format</a> of
<code><a href="mod_log_config.html">mod_log_config</a></code>. First there is an
additional ``<code>%{</code><em>varname</em><code>}x</code>''
eXtension format function which can be used to expand any variables
provided by any module, especially those provided by mod_ssl which can
you find in the above table.</p>
<p>
For backward compatibility there is additionally a special
``<code>%{</code><em>name</em><code>}c</code>'' cryptography format function
provided. Information about this function is provided in the <a href="../ssl/ssl_compat.html">Compatibility</a> chapter.</p>
<p>
Example:</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
CustomLog logs/ssl_request_log \
"%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
</code></td></tr></table></blockquote>
<hr/><h2><a name="SSLCACertificateFile">SSLCACertificateFile</a> <a name="sslcacertificatefile">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>File of concatenated PEM-encoded CA Certificates
for Client Auth</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>SSLCACertificateFile <em>file-path</em></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_ssl</td></tr></table></td></tr></table>
<p>
This directive sets the <em>all-in-one</em> file where you can assemble the
Certificates of Certification Authorities (CA) whose <em>clients</em> you deal
with. These are used for Client Authentication. Such a file is simply the
concatenation of the various PEM-encoded Certificate files, in order of
preference. This can be used alternatively and/or additionally to
<a href="#sslcacertificatepath" class="directive"><code class="directive">SSLCACertificatePath</code></a>.</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><p align="center"><strong>Example</strong></p><code>
SSLCACertificateFile /usr/local/apache/conf/ssl.crt/ca-bundle-client.crt
</code></td></tr></table></blockquote>
<hr/><h2><a name="SSLCACertificatePath">SSLCACertificatePath</a> <a name="sslcacertificatepath">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Directory of PEM-encoded CA Certificates for
Client Auth</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>SSLCACertificatePath <em>directory-path</em></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_ssl</td></tr></table></td></tr></table>
<p>
This directive sets the directory where you keep the Certificates of
Certification Authorities (CAs) whose clients you deal with. These are used to
verify the client certificate on Client Authentication.</p>
<p>
The files in this directory have to be PEM-encoded and are accessed through
hash filenames. So usually you can't just place the Certificate files
there: you also have to create symbolic links named
<em>hash-value</em><code>.N</code>. And you should always make sure this directory
contains the appropriate symbolic links. Use the <code>Makefile</code> which
comes with mod_ssl to accomplish this task.</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><p align="center"><strong>Example</strong></p><code>
SSLCACertificatePath /usr/local/apache/conf/ssl.crt/
</code></td></tr></table></blockquote>
<hr/><h2><a name="SSLCARevocationFile">SSLCARevocationFile</a> <a name="sslcarevocationfile">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>File of concatenated PEM-encoded CA CRLs for
Client Auth</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>SSLCARevocationFile <em>file-path</em></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_ssl</td></tr></table></td></tr></table>
<p>
This directive sets the <em>all-in-one</em> file where you can
assemble the Certificate Revocation Lists (CRL) of Certification
Authorities (CA) whose <em>clients</em> you deal with. These are used
for Client Authentication. Such a file is simply the concatenation of
the various PEM-encoded CRL files, in order of preference. This can be
used alternatively and/or additionally to <a href="#sslcarevocationpath" class="directive"><code class="directive">SSLCARevocationPath</code></a>.</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><p align="center"><strong>Example</strong></p><code>
SSLCARevocationFile /usr/local/apache/conf/ssl.crl/ca-bundle-client.crl
</code></td></tr></table></blockquote>
<hr/><h2><a name="SSLCARevocationPath">SSLCARevocationPath</a> <a name="sslcarevocationpath">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Directory of PEM-encoded CA CRLs for
Client Auth</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>SSLCARevocationPath <em>directory-path</em></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_ssl</td></tr></table></td></tr></table>
<p>
This directive sets the directory where you keep the Certificate Revocation
Lists (CRL) of Certification Authorities (CAs) whose clients you deal with.
These are used to revoke the client certificate on Client Authentication.</p>
<p>
The files in this directory have to be PEM-encoded and are accessed through
hash filenames. So usually you have not only to place the CRL files there.
Additionally you have to create symbolic links named
<em>hash-value</em><code>.rN</code>. And you should always make sure this directory
contains the appropriate symbolic links. Use the <code>Makefile</code> which
comes with <code><a href="mod_ssl.html">mod_ssl</a></code> to accomplish this task.</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><p align="center"><strong>Example</strong></p><code>
SSLCARevocationPath /usr/local/apache/conf/ssl.crl/
</code></td></tr></table></blockquote>
<hr/><h2><a name="SSLCertificateChainFile">SSLCertificateChainFile</a> <a name="sslcertificatechainfile">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>File of PEM-encoded Server CA Certificates</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>SSLCertificateChainFile <em>file-path</em></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_ssl</td></tr></table></td></tr></table>
<p>
This directive sets the optional <em>all-in-one</em> file where you can
assemble the certificates of Certification Authorities (CA) which form the
certificate chain of the server certificate. This starts with the issuing CA
certificate of of the server certificate and can range up to the root CA
certificate. Such a file is simply the concatenation of the various
PEM-encoded CA Certificate files, usually in certificate chain order.</p>
<p>
This should be used alternatively and/or additionally to <a href="#sslcacertificatepath" class="directive"><code class="directive">SSLCACertificatePath</code></a> for explicitly
constructing the server certificate chain which is sent to the browser
in addition to the server certificate. It is especially useful to
avoid conflicts with CA certificates when using client
authentication. Because although placing a CA certificate of the
server certificate chain into <a href="#sslcacertificatepath" class="directive"><code class="directive">SSLCACertificatePath</code></a> has the same effect
for the certificate chain construction, it has the side-effect that
client certificates issued by this same CA certificate are also
accepted on client authentication. That's usually not one expect.</p>
<p>
But be careful: Providing the certificate chain works only if you are using a
<em>single</em> (either RSA <em>or</em> DSA) based server certificate. If you are
using a coupled RSA+DSA certificate pair, this will work only if actually both
certificates use the <em>same</em> certificate chain. Else the browsers will be
confused in this situation.</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><p align="center"><strong>Example</strong></p><code>
SSLCertificateChainFile /usr/local/apache/conf/ssl.crt/ca.crt
</code></td></tr></table></blockquote>
<hr/><h2><a name="SSLCertificateFile">SSLCertificateFile</a> <a name="sslcertificatefile">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Server PEM-encoded X.509 Certificate file</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>SSLCertificateFile <em>file-path</em></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_ssl</td></tr></table></td></tr></table>
<p>
This directive points to the PEM-encoded Certificate file for the server and
optionally also to the corresponding RSA or DSA Private Key file for it
(contained in the same file). If the contained Private Key is encrypted the
Pass Phrase dialog is forced at startup time. This directive can be used up to
two times (referencing different filenames) when both a RSA and a DSA based
server certificate is used in parallel.</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><p align="center"><strong>Example</strong></p><code>
SSLCertificateFile /usr/local/apache/conf/ssl.crt/server.crt
</code></td></tr></table></blockquote>
<hr/><h2><a name="SSLCertificateKeyFile">SSLCertificateKeyFile</a> <a name="sslcertificatekeyfile">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Server PEM-encoded Private Key file</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>SSLCertificateKeyFile <em>file-path</em></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_ssl</td></tr></table></td></tr></table>
<p>
This directive points to the PEM-encoded Private Key file for the
server. If the Private Key is not combined with the Certificate in the
<code class="directive">SSLCertificateFile</code>, use this additional directive to
point to the file with the stand-alone Private Key. When
<code class="directive">SSLCertificateFile</code> is used and the file
contains both the Certificate and the Private Key this directive need
not be used. But we strongly discourage this practice. Instead we
recommend you to separate the Certificate and the Private Key. If the
contained Private Key is encrypted, the Pass Phrase dialog is forced
at startup time. This directive can be used up to two times
(referencing different filenames) when both a RSA and a DSA based
private key is used in parallel.</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><p align="center"><strong>Example</strong></p><code>
SSLCertificateKeyFile /usr/local/apache/conf/ssl.key/server.key
</code></td></tr></table></blockquote>
<hr/><h2><a name="SSLCipherSuite">SSLCipherSuite</a> <a name="sslciphersuite">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Cipher Suite available for negotiation in SSL
handshake</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>SSLCipherSuite <em>cipher-spec</em></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>SSLCipherSuite ALL:!ADH:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host, directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>AuthConfig</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_ssl</td></tr></table></td></tr></table>
<p>
This complex directive uses a colon-separated <em>cipher-spec</em> string
consisting of OpenSSL cipher specifications to configure the Cipher Suite the
client is permitted to negotiate in the SSL handshake phase. Notice that this
directive can be used both in per-server and per-directory context. In
per-server context it applies to the standard SSL handshake when a connection
is established. In per-directory context it forces a SSL renegotation with the
reconfigured Cipher Suite after the HTTP request was read but before the HTTP
response is sent.</p>
<p>
An SSL cipher specification in <em>cipher-spec</em> is composed of 4 major
attributes plus a few extra minor ones:</p>
<ul>
<li><em>Key Exchange Algorithm</em>:<br>
RSA or Diffie-Hellman variants.
</li>
<li><em>Authentication Algorithm</em>:<br>
RSA, Diffie-Hellman, DSS or none.
</li>
<li><em>Cipher/Encryption Algorithm</em>:<br>
DES, Triple-DES, RC4, RC2, IDEA or none.
</li>
<li><em>MAC Digest Algorithm</em>:<br>
MD5, SHA or SHA1.
</li>
</ul>
<p>An SSL cipher can also be an export cipher and is either a SSLv2 or SSLv3/TLSv1
cipher (here TLSv1 is equivalent to SSLv3). To specify which ciphers to use,
one can either specify all the Ciphers, one at a time, or use aliases to
specify the preference and order for the ciphers (see <a href="#table1">Table
1</a>).</p>
<table width="600" cellspacing="0" cellpadding="1" border="0" summary="">
<tr><td bgcolor="#cccccc">
<table width="598" cellpadding="5" cellspacing="0" border="0" summary="">
<tr><td bgcolor="#ffffff">
<table border="0" cellspacing="0" cellpadding="2" width="598" summary="">
<tr><td><strong>Tag</strong></td> <td><strong>Description</strong></td></tr>
<tr><td colspan="2"><em>Key Exchange Algorithm:</em></td></tr>
<tr><td><code>kRSA</code></td> <td>RSA key exchange</td></tr>
<tr><td><code>kDHr</code></td> <td>Diffie-Hellman key exchange with RSA key</td></tr>
<tr><td><code>kDHd</code></td> <td>Diffie-Hellman key exchange with DSA key</td></tr>
<tr><td><code>kEDH</code></td> <td>Ephemeral (temp.key) Diffie-Hellman key exchange (no cert)</td> </tr>
<tr><td colspan="2"><em>Authentication Algorithm:</em></td></tr>
<tr><td><code>aNULL</code></td> <td>No authentication</td></tr>
<tr><td><code>aRSA</code></td> <td>RSA authentication</td></tr>
<tr><td><code>aDSS</code></td> <td>DSS authentication</td> </tr>
<tr><td><code>aDH</code></td> <td>Diffie-Hellman authentication</td></tr>
<tr><td colspan="2"><em>Cipher Encoding Algorithm:</em></td></tr>
<tr><td><code>eNULL</code></td> <td>No encoding</td> </tr>
<tr><td><code>DES</code></td> <td>DES encoding</td> </tr>
<tr><td><code>3DES</code></td> <td>Triple-DES encoding</td> </tr>
<tr><td><code>RC4</code></td> <td>RC4 encoding</td> </tr>
<tr><td><code>RC2</code></td> <td>RC2 encoding</td> </tr>
<tr><td><code>IDEA</code></td> <td>IDEA encoding</td> </tr>
<tr><td colspan="2"><em>MAC Digest Algorithm</em>:</td></tr>
<tr><td><code>MD5</code></td> <td>MD5 hash function</td></tr>
<tr><td><code>SHA1</code></td> <td>SHA1 hash function</td></tr>
<tr><td><code>SHA</code></td> <td>SHA hash function</td> </tr>
<tr><td colspan="2"><em>Aliases:</em></td></tr>
<tr><td><code>SSLv2</code></td> <td>all SSL version 2.0 ciphers</td></tr>
<tr><td><code>SSLv3</code></td> <td>all SSL version 3.0 ciphers</td> </tr>
<tr><td><code>TLSv1</code></td> <td>all TLS version 1.0 ciphers</td> </tr>
<tr><td><code>EXP</code></td> <td>all export ciphers</td> </tr>
<tr><td><code>EXPORT40</code></td> <td>all 40-bit export ciphers only</td> </tr>
<tr><td><code>EXPORT56</code></td> <td>all 56-bit export ciphers only</td> </tr>
<tr><td><code>LOW</code></td> <td>all low strength ciphers (no export, single DES)</td></tr>
<tr><td><code>MEDIUM</code></td> <td>all ciphers with 128 bit encryption</td> </tr>
<tr><td><code>HIGH</code></td> <td>all ciphers using Triple-DES</td> </tr>
<tr><td><code>RSA</code></td> <td>all ciphers using RSA key exchange</td> </tr>
<tr><td><code>DH</code></td> <td>all ciphers using Diffie-Hellman key exchange</td> </tr>
<tr><td><code>EDH</code></td> <td>all ciphers using Ephemeral Diffie-Hellman key exchange</td> </tr>
<tr><td><code>ADH</code></td> <td>all ciphers using Anonymous Diffie-Hellman key exchange</td> </tr>
<tr><td><code>DSS</code></td> <td>all ciphers using DSS authentication</td> </tr>
<tr><td><code>NULL</code></td> <td>all ciphers using no encryption</td> </tr>
</table>
</td>
</tr></table>
</td></tr></table>
<p>
Now where this becomes interesting is that these can be put together
to specify the order and ciphers you wish to use. To speed this up
there are also aliases (<code>SSLv2, SSLv3, TLSv1, EXP, LOW, MEDIUM,
HIGH</code>) for certain groups of ciphers. These tags can be joined
together with prefixes to form the <em>cipher-spec</em>. Available
prefixes are:</p>
<ul>
<li>none: add cipher to list</li>
<li><code>+</code>: add ciphers to list and pull them to current location in list</li>
<li><code>-</code>: remove cipher from list (can be added later again)</li>
<li><code>!</code>: kill cipher from list completely (can <strong>not</strong> be added later again)</li>
</ul>
<p>A simpler way to look at all of this is to use the ``<code>openssl ciphers
-v</code>'' command which provides a nice way to successively create the
correct <em>cipher-spec</em> string. The default <em>cipher-spec</em> string
is ``<code>ALL:!ADH:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP</code>'' which
means the following: first, remove from consideration any ciphers that do not
authenticate, i.e. for SSL only the Anonymous Diffie-Hellman ciphers. Next,
use ciphers using RC4 and RSA. Next include the high, medium and then the low
security ciphers. Finally <em>pull</em> all SSLv2 and export ciphers to the
end of the list.</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
<pre>
$ openssl ciphers -v 'ALL:!ADH:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP'
NULL-SHA SSLv3 Kx=RSA Au=RSA Enc=None Mac=SHA1
NULL-MD5 SSLv3 Kx=RSA Au=RSA Enc=None Mac=MD5
EDH-RSA-DES-CBC3-SHA SSLv3 Kx=DH Au=RSA Enc=3DES(168) Mac=SHA1
... ... ... ... ...
EXP-RC4-MD5 SSLv3 Kx=RSA(512) Au=RSA Enc=RC4(40) Mac=MD5 export
EXP-RC2-CBC-MD5 SSLv2 Kx=RSA(512) Au=RSA Enc=RC2(40) Mac=MD5 export
EXP-RC4-MD5 SSLv2 Kx=RSA(512) Au=RSA Enc=RC4(40) Mac=MD5 export
</pre>
</code></td></tr></table></blockquote>
<p>The complete list of particular RSA & DH ciphers for SSL is given in <a href="#table2">Table 2</a>.</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><p align="center"><strong>Example</strong></p><code>
SSLCipherSuite RSA:!EXP:!NULL:+HIGH:+MEDIUM:-LOW
</code></td></tr></table></blockquote>
<table width="600" cellspacing="0" cellpadding="1" border="0" summary="">
<tr><td bgcolor="#cccccc">
<table width="598" cellpadding="5" cellspacing="0" border="0" summary="">
<tr><td bgcolor="#ffffff">
<table border="0" cellspacing="0" cellpadding="2" width="598" summary="">
<tr><td><strong>Cipher-Tag</strong></td> <td><strong>Protocol</strong></td> <td><strong>Key Ex.</strong></td> <td><strong>Auth.</strong></td> <td><strong>Enc.</strong></td> <td><strong>MAC</strong></td> <td><strong>Type</strong></td> </tr>
<tr><td colspan="7"><em>RSA Ciphers:</em></td></tr>
<tr><td><code>DES-CBC3-SHA</code></td> <td>SSLv3</td> <td>RSA</td> <td>RSA</td> <td>3DES(168)</td> <td>SHA1</td> <td> </td> </tr>
<tr><td><code>DES-CBC3-MD5</code></td> <td>SSLv2</td> <td>RSA</td> <td>RSA</td> <td>3DES(168)</td> <td>MD5</td> <td> </td> </tr>
<tr><td><code>IDEA-CBC-SHA</code></td> <td>SSLv3</td> <td>RSA</td> <td>RSA</td> <td>IDEA(128)</td> <td>SHA1</td> <td> </td> </tr>
<tr><td><code>RC4-SHA</code></td> <td>SSLv3</td> <td>RSA</td> <td>RSA</td> <td>RC4(128)</td> <td>SHA1</td> <td> </td> </tr>
<tr><td><code>RC4-MD5</code></td> <td>SSLv3</td> <td>RSA</td> <td>RSA</td> <td>RC4(128)</td> <td>MD5</td> <td> </td> </tr>
<tr><td><code>IDEA-CBC-MD5</code></td> <td>SSLv2</td> <td>RSA</td> <td>RSA</td> <td>IDEA(128)</td> <td>MD5</td> <td> </td> </tr>
<tr><td><code>RC2-CBC-MD5</code></td> <td>SSLv2</td> <td>RSA</td> <td>RSA</td> <td>RC2(128)</td> <td>MD5</td> <td> </td> </tr>
<tr><td><code>RC4-MD5</code></td> <td>SSLv2</td> <td>RSA</td> <td>RSA</td> <td>RC4(128)</td> <td>MD5</td> <td> </td> </tr>
<tr><td><code>DES-CBC-SHA</code></td> <td>SSLv3</td> <td>RSA</td> <td>RSA</td> <td>DES(56)</td> <td>SHA1</td> <td> </td> </tr>
<tr><td><code>RC4-64-MD5</code></td> <td>SSLv2</td> <td>RSA</td> <td>RSA</td> <td>RC4(64)</td> <td>MD5</td> <td> </td> </tr>
<tr><td><code>DES-CBC-MD5</code></td> <td>SSLv2</td> <td>RSA</td> <td>RSA</td> <td>DES(56)</td> <td>MD5</td> <td> </td> </tr>
<tr><td><code>EXP-DES-CBC-SHA</code></td> <td>SSLv3</td> <td>RSA(512)</td> <td>RSA</td> <td>DES(40)</td> <td>SHA1</td> <td> export</td> </tr>
<tr><td><code>EXP-RC2-CBC-MD5</code></td> <td>SSLv3</td> <td>RSA(512)</td> <td>RSA</td> <td>RC2(40)</td> <td>MD5</td> <td> export</td> </tr>
<tr><td><code>EXP-RC4-MD5</code></td> <td>SSLv3</td> <td>RSA(512)</td> <td>RSA</td> <td>RC4(40)</td> <td>MD5</td> <td> export</td> </tr>
<tr><td><code>EXP-RC2-CBC-MD5</code></td> <td>SSLv2</td> <td>RSA(512)</td> <td>RSA</td> <td>RC2(40)</td> <td>MD5</td> <td> export</td> </tr>
<tr><td><code>EXP-RC4-MD5</code></td> <td>SSLv2</td> <td>RSA(512)</td> <td>RSA</td> <td>RC4(40)</td> <td>MD5</td> <td> export</td> </tr>
<tr><td><code>NULL-SHA</code></td> <td>SSLv3</td> <td>RSA</td> <td>RSA</td> <td>None</td> <td>SHA1</td> <td> </td> </tr>
<tr><td><code>NULL-MD5</code></td> <td>SSLv3</td> <td>RSA</td> <td>RSA</td> <td>None</td> <td>MD5</td> <td> </td> </tr>
<tr><td colspan="7"><em>Diffie-Hellman Ciphers:</em></td></tr>
<tr><td><code>ADH-DES-CBC3-SHA</code></td> <td>SSLv3</td> <td>DH</td> <td>None</td> <td>3DES(168)</td> <td>SHA1</td> <td> </td> </tr>
<tr><td><code>ADH-DES-CBC-SHA</code></td> <td>SSLv3</td> <td>DH</td> <td>None</td> <td>DES(56)</td> <td>SHA1</td> <td> </td> </tr>
<tr><td><code>ADH-RC4-MD5</code></td> <td>SSLv3</td> <td>DH</td> <td>None</td> <td>RC4(128)</td> <td>MD5</td> <td> </td> </tr>
<tr><td><code>EDH-RSA-DES-CBC3-SHA</code></td> <td>SSLv3</td> <td>DH</td> <td>RSA</td> <td>3DES(168)</td> <td>SHA1</td> <td> </td> </tr>
<tr><td><code>EDH-DSS-DES-CBC3-SHA</code></td> <td>SSLv3</td> <td>DH</td> <td>DSS</td> <td>3DES(168)</td> <td>SHA1</td> <td> </td> </tr>
<tr><td><code>EDH-RSA-DES-CBC-SHA</code></td> <td>SSLv3</td> <td>DH</td> <td>RSA</td> <td>DES(56)</td> <td>SHA1</td> <td> </td> </tr>
<tr><td><code>EDH-DSS-DES-CBC-SHA</code></td> <td>SSLv3</td> <td>DH</td> <td>DSS</td> <td>DES(56)</td> <td>SHA1</td> <td> </td> </tr>
<tr><td><code>EXP-EDH-RSA-DES-CBC-SHA</code></td> <td>SSLv3</td> <td>DH(512)</td> <td>RSA</td> <td>DES(40)</td> <td>SHA1</td> <td> export</td> </tr>
<tr><td><code>EXP-EDH-DSS-DES-CBC-SHA</code></td> <td>SSLv3</td> <td>DH(512)</td> <td>DSS</td> <td>DES(40)</td> <td>SHA1</td> <td> export</td> </tr>
<tr><td><code>EXP-ADH-DES-CBC-SHA</code></td> <td>SSLv3</td> <td>DH(512)</td> <td>None</td> <td>DES(40)</td> <td>SHA1</td> <td> export</td> </tr>
<tr><td><code>EXP-ADH-RC4-MD5</code></td> <td>SSLv3</td> <td>DH(512)</td> <td>None</td> <td>RC4(40)</td> <td>MD5</td> <td> export</td> </tr>
</table>
</td>
</tr></table>
</td></tr></table>
<hr/><h2><a name="SSLEngine">SSLEngine</a> <a name="sslengine">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>SSL Engine Operation Switch</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>SSLEngine on|off</td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>SSLEngine off</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_ssl</td></tr></table></td></tr></table>
<p>
This directive toggles the usage of the SSL/TLS Protocol Engine. This
is usually used inside a <a href="core.html#virtualhost" class="directive"><code class="directive"><VirtualHost></code></a> section to enable SSL/TLS for a
particular virtual host. By default the SSL/TLS Protocol Engine is
disabled for both the main server and all configured virtual hosts.</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><p align="center"><strong>Example</strong></p><code>
<VirtualHost _default_:443><br>
SSLEngine on<br>
...<br>
</VirtualHost>
</code></td></tr></table></blockquote>
<hr/><h2><a name="SSLMutex">SSLMutex</a> <a name="sslmutex">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Semaphore for internal mutual exclusion of
operations</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>SSLMutex <em>type</em></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>SSLMutex none</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_ssl</td></tr></table></td></tr></table>
<p>
This configures the SSL engine's semaphore (aka. lock) which is used for mutual
exclusion of operations which have to be done in a synchronized way between the
pre-forked Apache server processes. This directive can only be used in the
global server context because it's only useful to have one global mutex.</p>
<p>
The following Mutex <em>types</em> are available:</p>
<ul>
<li><code>none</code>
<p>
This is the default where no Mutex is used at all. Use it at your own
risk. But because currently the Mutex is mainly used for synchronizing
write access to the SSL Session Cache you can live without it as long
as you accept a sometimes garbled Session Cache. So it's not recommended
to leave this the default. Instead configure a real Mutex.</p></li>
<li><code>file:/path/to/mutex</code>
<p>
This is the portable and (under Unix) always provided Mutex variant where
a physical (lock-)file is used as the Mutex. Always use a local disk
filesystem for <code>/path/to/mutex</code> and never a file residing on a
NFS- or AFS-filesystem. Note: Internally, the Process ID (PID) of the
Apache parent process is automatically appended to
<code>/path/to/mutex</code> to make it unique, so you don't have to worry
about conflicts yourself. Notice that this type of mutex is not available
under the Win32 environment. There you <em>have</em> to use the semaphore
mutex.</p></li>
<li><code>sem</code>
<p>
This is the most elegant but also most non-portable Mutex variant where a
SysV IPC Semaphore (under Unix) and a Windows Mutex (under Win32) is used
when possible. It is only available when the underlying platform
supports it.</p></li>
</ul>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><p align="center"><strong>Example</strong></p><code>
SSLMutex file:/usr/local/apache/logs/ssl_mutex
</code></td></tr></table></blockquote>
<hr/><h2><a name="SSLOptions">SSLOptions</a> <a name="ssloptions">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Configure various SSL engine run-time options</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>SSLOptions [+|-]<em>option</em> ...</td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host, directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>Options</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_ssl</td></tr></table></td></tr></table>
<p>
This directive can be used to control various run-time options on a
per-directory basis. Normally, if multiple <code>SSLOptions</code>
could apply to a directory, then the most specific one is taken
completely; the options are not merged. However if <em>all</em> the
options on the <code>SSLOptions</code> directive are preceded by a
plus (<code>+</code>) or minus (<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>
<p>
The available <em>option</em>s are:</p>
<ul>
<li><code>StdEnvVars</code>
<p>
When this option is enabled, the standard set of SSL related CGI/SSI
environment variables are created. This per default is disabled for
performance reasons, because the information extraction step is a
rather expensive operation. So one usually enables this option for
CGI and SSI requests only.</p>
</li>
<li><code>CompatEnvVars</code>
<p>
When this option is enabled, additional CGI/SSI environment variables are
created for backward compatibility to other Apache SSL solutions. Look in
the <a href="../ssl/ssl_compat.html">Compatibility</a> chapter for details
on the particular variables generated.</p>
</li>
<li><code>ExportCertData</code>
<p>
When this option is enabled, additional CGI/SSI environment variables are
created: <code>SSL_SERVER_CERT</code>, <code>SSL_CLIENT_CERT</code> and
<code>SSL_CLIENT_CERT_CHAIN</code><em>n</em> (with <em>n</em> = 0,1,2,..).
These contain the PEM-encoded X.509 Certificates of server and client for
the current HTTPS connection and can be used by CGI scripts for deeper
Certificate checking. Additionally all other certificates of the client
certificate chain are provided, too. This bloats up the environment a
little bit which is why you have to use this option to enable it on
demand.</p>
</li>
<li><code>FakeBasicAuth</code>
<p>
When this option is enabled, the Subject Distinguished Name (DN) of the
Client X509 Certificate is translated into a HTTP Basic Authorization
username. This means that the standard Apache authentication methods can
be used for access control. The user name is just the Subject of the
Client's X509 Certificate (can be determined by running OpenSSL's
<code>openssl x509</code> command: <code>openssl x509 -noout -subject -in
</code><em>certificate</em><code>.crt</code>). Note that no password is
obtained from the user. Every entry in the user file needs this password:
``<code>xxj31ZMTZzkVA</code>'', which is the DES-encrypted version of the
word `<code>password</code>''. Those who live under MD5-based encryption
(for instance under FreeBSD or BSD/OS, etc.) should use the following MD5
hash of the same word: ``<code>$1$OXLyS...$Owx8s2/m9/gfkcRVXzgoE/</code>''.</p>
</li>
<li><code>StrictRequire</code>
<p>
This <em>forces</em> forbidden access when <code>SSLRequireSSL</code> or
<code>SSLRequire</code> successfully decided that access should be
forbidden. Usually the default is that in the case where a ``<code>Satisfy
any</code>'' directive is used, and other access restrictions are passed,
denial of access due to <code>SSLRequireSSL</code> or
<code>SSLRequire</code> is overridden (because that's how the Apache
<code>Satisfy</code> mechanism should work.) But for strict access restriction
you can use <code>SSLRequireSSL</code> and/or <code>SSLRequire</code> in
combination with an ``<code>SSLOptions +StrictRequire</code>''. Then an
additional ``<code>Satisfy Any</code>'' has no chance once mod_ssl has
decided to deny access.</p>
</li>
<li><code>OptRenegotiate</code>
<p>
This enables optimized SSL connection renegotiation handling when SSL
directives are used in per-directory context. By default a strict
scheme is enabled where <em>every</em> per-directory reconfiguration of
SSL parameters causes a <em>full</em> SSL renegotiation handshake. When this
option is used mod_ssl tries to avoid unnecessary handshakes by doing more
granular (but still safe) parameter checks. Nevertheless these granular
checks sometimes maybe not what the user expects, so enable this on a
per-directory basis only, please.</p>
</li>
</ul>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><p align="center"><strong>Example</strong></p><code>
SSLOptions +FakeBasicAuth -StrictRequire<br>
<Files ~ "\.(cgi|shtml)$"><br>
SSLOptions +StdEnvVars +CompatEnvVars -ExportCertData<br>
<Files>
</code></td></tr></table></blockquote>
<hr/><h2><a name="SSLPassPhraseDialog">SSLPassPhraseDialog</a> <a name="sslpassphrasedialog">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Type of pass phrase dialog for encrypted private
keys</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>SSLPassPhraseDialog <em>type</em></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>SSLPassPhraseDialog builtin</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_ssl</td></tr></table></td></tr></table>
<p>
When Apache starts up it has to read the various Certificate (see
<a href="#sslcertificatefile" class="directive"><code class="directive">SSLCertificateFile</code></a>) and
Private Key (see <a href="#sslcertificatekeyfile" class="directive"><code class="directive">SSLCertificateKeyFile</code></a>) files of the
SSL-enabled virtual servers. Because for security reasons the Private
Key files are usually encrypted, mod_ssl needs to query the
administrator for a Pass Phrase in order to decrypt those files. This
query can be done in two ways which can be configured by
<em>type</em>:</p>
<ul>
<li><code>builtin</code>
<p>
This is the default where an interactive terminal dialog occurs at startup
time just before Apache detaches from the terminal. Here the administrator
has to manually enter the Pass Phrase for each encrypted Private Key file.
Because a lot of SSL-enabled virtual hosts can be configured, the
following reuse-scheme is used to minimize the dialog: When a Private Key
file is encrypted, all known Pass Phrases (at the beginning there are
none, of course) are tried. If one of those known Pass Phrases succeeds no
dialog pops up for this particular Private Key file. If none succeeded,
another Pass Phrase is queried on the terminal and remembered for the next
round (where it perhaps can be reused).</p>
<p>
This scheme allows mod_ssl to be maximally flexible (because for N encrypted
Private Key files you <em>can</em> use N different Pass Phrases - but then
you have to enter all of them, of course) while minimizing the terminal
dialog (i.e. when you use a single Pass Phrase for all N Private Key files
this Pass Phrase is queried only once).</p></li>
<li><code>exec:/path/to/program</code>
<p>
Here an external program is configured which is called at startup for each
encrypted Private Key file. It is called with two arguments (the first is
of the form ``<code>servername:portnumber</code>'', the second is either
``<code>RSA</code>'' or ``<code>DSA</code>''), which indicate for which
server and algorithm it has to print the corresponding Pass Phrase to
<code>stdout</code>. The intent is that this external program first runs
security checks to make sure that the system is not compromised by an
attacker, and only when these checks were passed successfully it provides
the Pass Phrase.</p>
<p>
Both these security checks, and the way the Pass Phrase is determined, can
be as complex as you like. Mod_ssl just defines the interface: an
executable program which provides the Pass Phrase on <code>stdout</code>.
Nothing more or less! So, if you're really paranoid about security, here
is your interface. Anything else has to be left as an exercise to the
administrator, because local security requirements are so different.</p>
<p>
The reuse-algorithm above is used here, too. In other words: The external
program is called only once per unique Pass Phrase.</p></li>
</ul>
<p>
Example:</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
SSLPassPhraseDialog exec:/usr/local/apache/sbin/pp-filter
</code></td></tr></table></blockquote>
<hr/><h2><a name="SSLProtocol">SSLProtocol</a> <a name="sslprotocol">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Configure usable SSL protocol flavors</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>SSLProtocol [+|-]<em>protocol</em> ...</td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>SSLProtocol all</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>Options</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_ssl</td></tr></table></td></tr></table>
<p>
This directive can be used to control the SSL protocol flavors mod_ssl should
use when establishing its server environment. Clients then can only connect
with one of the provided protocols.</p>
<p>
The available (case-insensitive) <em>protocol</em>s are:</p>
<ul>
<li><code>SSLv2</code>
<p>
This is the Secure Sockets Layer (SSL) protocol, version 2.0. It is the
original SSL protocol as designed by Netscape Corporation.</p></li>
<li><code>SSLv3</code>
<p>
This is the Secure Sockets Layer (SSL) protocol, version 3.0. It is the
successor to SSLv2 and the currently (as of February 1999) de-facto
standardized SSL protocol from Netscape Corporation. It's supported by
almost all popular browsers.</p></li>
<li><code>TLSv1</code>
<p>
This is the Transport Layer Security (TLS) protocol, version 1.0. It is the
successor to SSLv3 and currently (as of February 1999) still under
construction by the Internet Engineering Task Force (IETF). It's still
not supported by any popular browsers.</p></li>
<li><code>All</code>
<p>
This is a shortcut for ``<code>+SSLv2 +SSLv3 +TLSv1</code>'' and a
convinient way for enabling all protocols except one when used in
combination with the minus sign on a protocol as the example above
shows.</p></li>
</ul>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><p align="center"><strong>Example</strong></p><code>
# enable SSLv3 and TLSv1, but not SSLv2<br>
SSLProtocol all -SSLv2
</code></td></tr></table></blockquote>
<hr/><h2><a name="SSLRandomSeed">SSLRandomSeed</a> <a name="sslrandomseed">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Pseudo Random Number Generator (PRNG) seeding
source</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>SSLRandomSeed <em>context</em> <em>source</em>
[<em>bytes</em>]</td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_ssl</td></tr></table></td></tr></table>
<p>
This configures one or more sources for seeding the Pseudo Random Number
Generator (PRNG) in OpenSSL at startup time (<em>context</em> is
<code>startup</code>) and/or just before a new SSL connection is established
(<em>context</em> is <code>connect</code>). This directive can only be used
in the global server context because the PRNG is a global facility.</p>
<p>
The following <em>source</em> variants are available:</p>
<ul>
<li><code>builtin</code>
<p> This is the always available builtin seeding source. It's usage
consumes minimum CPU cycles under runtime and hence can be always used
without drawbacks. The source used for seeding the PRNG contains of the
current time, the current process id and (when applicable) a randomly
choosen 1KB extract of the inter-process scoreboard structure of Apache.
The drawback is that this is not really a strong source and at startup
time (where the scoreboard is still not available) this source just
produces a few bytes of entropy. So you should always, at least for the
startup, use an additional seeding source.</p></li>
<li><code>file:/path/to/source</code>
<p>
This variant uses an external file <code>/path/to/source</code> as the
source for seeding the PRNG. When <em>bytes</em> is specified, only the
first <em>bytes</em> number of bytes of the file form the entropy (and
<em>bytes</em> is given to <code>/path/to/source</code> as the first
argument). When <em>bytes</em> is not specified the whole file forms the
entropy (and <code>0</code> is given to <code>/path/to/source</code> as
the first argument). Use this especially at startup time, for instance
with an available <code>/dev/random</code> and/or
<code>/dev/urandom</code> devices (which usually exist on modern Unix
derivates like FreeBSD and Linux).</p>
<p>
<em>But be careful</em>: Usually <code>/dev/random</code> provides only as
much entropy data as it actually has, i.e. when you request 512 bytes of
entropy, but the device currently has only 100 bytes available two things
can happen: On some platforms you receive only the 100 bytes while on
other platforms the read blocks until enough bytes are available (which
can take a long time). Here using an existing <code>/dev/urandom</code> is
better, because it never blocks and actually gives the amount of requested
data. The drawback is just that the quality of the received data may not
be the best.</p>
<p>
On some platforms like FreeBSD one can even control how the entropy is
actually generated, i.e. by which system interrupts. More details one can
find under <em>rndcontrol(8)</em> on those platforms. Alternatively, when
your system lacks such a random device, you can use tool
like <a href="http://www.lothar.com/tech/crypto/">EGD</a>
(Entropy Gathering Daemon) and run it's client program with the
<code>exec:/path/to/program/</code> variant (see below) or use
<code>egd:/path/to/egd-socket</code> (see below).</p></li>
<li><code>exec:/path/to/program</code>
<p>
This variant uses an external executable
<code>/path/to/program</code> as the source for seeding the
PRNG. When <em>bytes</em> is specified, only the first
<em>bytes</em> number of bytes of its <code>stdout</code> contents
form the entropy. When <em>bytes</em> is not specified, the
entirety of the data produced on <code>stdout</code> form the
entropy. Use this only at startup time when you need a very strong
seeding with the help of an external program (for instance as in
the example above with the <code>truerand</code> utility you can
find in the mod_ssl distribution which is based on the AT&T
<em>truerand</em> library). Using this in the connection context
slows down the server too dramatically, of course. So usually you
should avoid using external programs in that context.</p></li>
<li><code>egd:/path/to/egd-socket</code> (Unix only)
<p>
This variant uses the Unix domain socket of the
external Entropy Gathering Daemon (EGD) (see <a href="http://www.lothar.com/tech/crypto/">http://www.lothar.com/tech
/crypto/</a>) to seed the PRNG. Use this if no random device exists
on your platform.</p></li>
</ul>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><p align="center"><strong>Example</strong></p><code>
SSLRandomSeed startup builtin<br>
SSLRandomSeed startup file:/dev/random<br>
SSLRandomSeed startup file:/dev/urandom 1024<br>
SSLRandomSeed startup exec:/usr/local/bin/truerand 16<br>
SSLRandomSeed connect builtin<br>
SSLRandomSeed connect file:/dev/random<br>
SSLRandomSeed connect file:/dev/urandom 1024<br>
</code></td></tr></table></blockquote>
<hr/><h2><a name="SSLRequire">SSLRequire</a> <a name="sslrequire">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Allow access only when an arbitrarily complex
boolean expression is true</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>SSLRequire <em>expression</em></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>AuthConfig</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_ssl</td></tr></table></td></tr></table>
<p>
This directive specifies a general access requirement which has to be
fulfilled in order to allow access. It's a very powerful directive because the
requirement specification is an arbitrarily complex boolean expression
containing any number of access checks.</p>
<p>
The <em>expression</em> must match the following syntax (given as a BNF
grammar notation):</p>
<blockquote>
<pre>
expr ::= "<strong>true</strong>" | "<strong>false</strong>"
| "<strong>!</strong>" expr
| expr "<strong>&&</strong>" expr
| expr "<strong>||</strong>" expr
| "<strong>(</strong>" expr "<strong>)</strong>"
| comp
comp ::= word "<strong>==</strong>" word | word "<strong>eq</strong>" word
| word "<strong>!=</strong>" word | word "<strong>ne</strong>" word
| word "<strong><</strong>" word | word "<strong>lt</strong>" word
| word "<strong><=</strong>" word | word "<strong>le</strong>" word
| word "<strong>></strong>" word | word "<strong>gt</strong>" word
| word "<strong>>=</strong>" word | word "<strong>ge</strong>" word
| word "<strong>in</strong>" "<strong>{</strong>" wordlist "<strong>}</strong>"
| word "<strong>=~</strong>" regex
| word "<strong>!~</strong>" regex
wordlist ::= word
| wordlist "<strong>,</strong>" word
word ::= digit
| cstring
| variable
| function
digit ::= [0-9]+
cstring ::= "..."
variable ::= "<strong>%{</strong>" varname "<strong>}</strong>"
function ::= funcname "<strong>(</strong>" funcargs "<strong>)</strong>"
</pre>
</blockquote>
<p>while for <code>varname</code> any variable from <a href="#table3">Table 3</a> can be used. Finally for
<code>funcname</code> the following functions are available:</p>
<ul>
<li><code>file(</code><em>filename</em><code>)</code>
<p>
This function takes one string argument and expands to the contents of the
file. This is especially useful for matching this contents against a
regular expression, etc.</p>
</li>
</ul>
<p>Notice that <em>expression</em> is first parsed into an internal machine
representation and then evaluated in a second step. Actually, in Global and
Per-Server Class context <em>expression</em> is parsed at startup time and
at runtime only the machine representation is executed. For Per-Directory
context this is different: here <em>expression</em> has to be parsed and
immediately executed for every request.</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><p align="center"><strong>Example</strong></p><code>
SSLRequire ( %{SSL_CIPHER} !~ m/^(EXP|NULL)-/ \<br>
and %{SSL_CLIENT_S_DN_O} eq "Snake Oil, Ltd." \<br>
and %{SSL_CLIENT_S_DN_OU} in {"Staff", "CA", "Dev"} \<br>
and %{TIME_WDAY} >= 1 and %{TIME_WDAY} <= 5 \<br>
and %{TIME_HOUR} >= 8 and %{TIME_HOUR} <= 20 ) \<br>
or %{REMOTE_ADDR} =~ m/^192\.76\.162\.[0-9]+$/
</code></td></tr></table></blockquote>
<table width="600" cellspacing="0" cellpadding="1" border="0" summary="">
<tr><td bgcolor="#cccccc">
<table width="598" cellpadding="5" cellspacing="0" border="0" summary="">
<tr><td bgcolor="#ffffff">
<table summary=""><tr><td>
<em>Standard CGI/1.0 and Apache variables:</em>
<pre>
HTTP_USER_AGENT PATH_INFO AUTH_TYPE
HTTP_REFERER QUERY_STRING SERVER_SOFTWARE
HTTP_COOKIE REMOTE_HOST API_VERSION
HTTP_FORWARDED REMOTE_IDENT TIME_YEAR
HTTP_HOST IS_SUBREQ TIME_MON
HTTP_PROXY_CONNECTION DOCUMENT_ROOT TIME_DAY
HTTP_ACCEPT SERVER_ADMIN TIME_HOUR
HTTP:headername SERVER_NAME TIME_MIN
THE_REQUEST SERVER_PORT TIME_SEC
REQUEST_METHOD SERVER_PROTOCOL TIME_WDAY
REQUEST_SCHEME REMOTE_ADDR TIME
REQUEST_URI REMOTE_USER ENV:<strong>variablename</strong>
REQUEST_FILENAME
</pre>
<em>SSL-related variables:</em>
<pre>
HTTPS SSL_CLIENT_M_VERSION SSL_SERVER_M_VERSION
SSL_CLIENT_M_SERIAL SSL_SERVER_M_SERIAL
SSL_PROTOCOL SSL_CLIENT_V_START SSL_SERVER_V_START
SSL_SESSION_ID SSL_CLIENT_V_END SSL_SERVER_V_END
SSL_CIPHER SSL_CLIENT_S_DN SSL_SERVER_S_DN
SSL_CIPHER_EXPORT SSL_CLIENT_S_DN_C SSL_SERVER_S_DN_C
SSL_CIPHER_ALGKEYSIZE SSL_CLIENT_S_DN_ST SSL_SERVER_S_DN_ST
SSL_CIPHER_USEKEYSIZE SSL_CLIENT_S_DN_L SSL_SERVER_S_DN_L
SSL_VERSION_LIBRARY SSL_CLIENT_S_DN_O SSL_SERVER_S_DN_O
SSL_VERSION_INTERFACE SSL_CLIENT_S_DN_OU SSL_SERVER_S_DN_OU
SSL_CLIENT_S_DN_CN SSL_SERVER_S_DN_CN
SSL_CLIENT_S_DN_T SSL_SERVER_S_DN_T
SSL_CLIENT_S_DN_I SSL_SERVER_S_DN_I
SSL_CLIENT_S_DN_G SSL_SERVER_S_DN_G
SSL_CLIENT_S_DN_S SSL_SERVER_S_DN_S
SSL_CLIENT_S_DN_D SSL_SERVER_S_DN_D
SSL_CLIENT_S_DN_UID SSL_SERVER_S_DN_UID
SSL_CLIENT_S_DN_Email SSL_SERVER_S_DN_Email
SSL_CLIENT_I_DN SSL_SERVER_I_DN
SSL_CLIENT_I_DN_C SSL_SERVER_I_DN_C
SSL_CLIENT_I_DN_ST SSL_SERVER_I_DN_ST
SSL_CLIENT_I_DN_L SSL_SERVER_I_DN_L
SSL_CLIENT_I_DN_O SSL_SERVER_I_DN_O
SSL_CLIENT_I_DN_OU SSL_SERVER_I_DN_OU
SSL_CLIENT_I_DN_CN SSL_SERVER_I_DN_CN
SSL_CLIENT_I_DN_T SSL_SERVER_I_DN_T
SSL_CLIENT_I_DN_I SSL_SERVER_I_DN_I
SSL_CLIENT_I_DN_G SSL_SERVER_I_DN_G
SSL_CLIENT_I_DN_S SSL_SERVER_I_DN_S
SSL_CLIENT_I_DN_D SSL_SERVER_I_DN_D
SSL_CLIENT_I_DN_UID SSL_SERVER_I_DN_UID
SSL_CLIENT_I_DN_Email SSL_SERVER_I_DN_Email
SSL_CLIENT_A_SIG SSL_SERVER_A_SIG
SSL_CLIENT_A_KEY SSL_SERVER_A_KEY
SSL_CLIENT_CERT SSL_SERVER_CERT
SSL_CLIENT_CERT_CHAIN<strong>n</strong>
SSL_CLIENT_VERIFY
</pre>
</td></tr></table>
</td>
</tr></table>
</td></tr></table>
<hr/><h2><a name="SSLRequireSSL">SSLRequireSSL</a> <a name="sslrequiressl">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Deny access when SSL is not used for the
HTTP request</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>SSLRequireSSL</td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>AuthConfig</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_ssl</td></tr></table></td></tr></table>
<p>
This directive forbids access unless HTTP over SSL (i.e. HTTPS) is enabled for
the current connection. This is very handy inside the SSL-enabled virtual
host or directories for defending against configuration errors that expose
stuff that should be protected. When this directive is present all requests
are denied which are not using SSL.</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><p align="center"><strong>Example</strong></p><code>
SSLRequireSSL
</code></td></tr></table></blockquote>
<hr/><h2><a name="SSLSessionCache">SSLSessionCache</a> <a name="sslsessioncache">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Type of the global/inter-process SSL Session
Cache</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>SSLSessionCache <em>type</em></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>SSLSessionCache none</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_ssl</td></tr></table></td></tr></table>
<p>
This configures the storage type of the global/inter-process SSL Session
Cache. This cache is an optional facility which speeds up parallel request
processing. For requests to the same server process (via HTTP keep-alive),
OpenSSL already caches the SSL session information locally. But because modern
clients request inlined images and other data via parallel requests (usually
up to four parallel requests are common) those requests are served by
<em>different</em> pre-forked server processes. Here an inter-process cache
helps to avoid unneccessary session handshakes.</p>
<p>
The following two storage <em>type</em>s are currently supported:</p>
<ul>
<li><code>none</code>
<p>
This is the default and just disables the global/inter-process Session
Cache. There is no drawback in functionality, but a noticeable speed
penalty can be observed.</p></li>
<li><code>dbm:/path/to/datafile</code>
<p>
This makes use of a DBM hashfile on the local disk to synchronize the
local OpenSSL memory caches of the server processes. The slight increase
in I/O on the server results in a visible request speedup for your
clients, so this type of storage is generally recommended.</p></li>
<li><code>shm:/path/to/datafile</code>[<code>(</code><em>size</em><code>)</code>]
<p>
This makes use of a high-performance hash table (approx. <em>size</em> bytes
in size) inside a shared memory segment in RAM (established via
<code>/path/to/datafile</code>) to synchronize the local OpenSSL memory
caches of the server processes. This storage type is not available on all
platforms. See the mod_ssl <code>INSTALL</code> document for details on
how to build Apache+EAPI with shared memory support.</p></li>
</ul>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><p align="center"><strong>Examples</strong></p><code>
SSLSessionCache dbm:/usr/local/apache/logs/ssl_gcache_data<br>
SSLSessionCache shm:/usr/local/apache/logs/ssl_gcache_data(512000)
</code></td></tr></table></blockquote>
<hr/><h2><a name="SSLSessionCacheTimeout">SSLSessionCacheTimeout</a> <a name="sslsessioncachetimeout">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Number of seconds before an SSL session expires
in the Session Cache</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>SSLSessionCacheTimeout <em>seconds</em></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>SSLSessionCacheTimeout 300</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_ssl</td></tr></table></td></tr></table>
<p>
This directive sets the timeout in seconds for the information stored in the
global/inter-process SSL Session Cache and the OpenSSL internal memory cache.
It can be set as low as 15 for testing, but should be set to higher
values like 300 in real life.</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><p align="center"><strong>Example</strong></p><code>
SSLSessionCacheTimeout 600
</code></td></tr></table></blockquote>
<hr/><h2><a name="SSLVerifyClient">SSLVerifyClient</a> <a name="sslverifyclient">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Type of Client Certificate verification</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>SSLVerifyClient <em>level</em></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>SSLVerifyClient none</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host, directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>AuthConfig</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_ssl</td></tr></table></td></tr></table>
<p>
This directive sets the Certificate verification level for the Client
Authentication. Notice that this directive can be used both in per-server and
per-directory context. In per-server context it applies to the client
authentication process used in the standard SSL handshake when a connection is
established. In per-directory context it forces a SSL renegotation with the
reconfigured client verification level after the HTTP request was read but
before the HTTP response is sent.</p>
<p>
The following levels are available for <em>level</em>:</p>
<ul>
<li><strong>none</strong>:
no client Certificate is required at all</li>
<li><strong>optional</strong>:
the client <em>may</em> present a valid Certificate</li>
<li><strong>require</strong>:
the client <em>has to</em> present a valid Certificate</li>
<li><strong>optional_no_ca</strong>:
the client may present a valid Certificate<br>
but it need not to be (successfully) verifiable.</li>
</ul>
<p>In practice only levels <strong>none</strong> and
<strong>require</strong> are really interesting, because level
<strong>optional</strong> doesn't work with all browsers and level
<strong>optional_no_ca</strong> is actually against the idea of
authentication (but can be used to establish SSL test pages, etc.)</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><p align="center"><strong>Example</strong></p><code>
SSLVerifyClient require
</code></td></tr></table></blockquote>
<hr/><h2><a name="SSLVerifyDepth">SSLVerifyDepth</a> <a name="sslverifydepth">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Maximum depth of CA Certificates in Client
Certificate verification</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>SSLVerifyDepth <em>number</em></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>SSLVerifyDepth 1</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host, directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>AuthConfig</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_ssl</td></tr></table></td></tr></table>
<p>
This directive sets how deeply mod_ssl should verify before deciding that the
clients don't have a valid certificate. Notice that this directive can be
used both in per-server and per-directory context. In per-server context it
applies to the client authentication process used in the standard SSL
handshake when a connection is established. In per-directory context it forces
a SSL renegotation with the reconfigured client verification depth after the
HTTP request was read but before the HTTP response is sent.</p>
<p>
The depth actually is the maximum number of intermediate certificate issuers,
i.e. the number of CA certificates which are max allowed to be followed while
verifying the client certificate. A depth of 0 means that self-signed client
certificates are accepted only, the default depth of 1 means the client
certificate can be self-signed or has to be signed by a CA which is directly
known to the server (i.e. the CA's certificate is under
<a href="#sslcacertificatepath" class="directive"><code class="directive">SSLCACertificatePath</code></a>), etc.</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><p align="center"><strong>Example</strong></p><code>
SSLVerifyDepth 10
</code></td></tr></table></blockquote>
<hr/></blockquote><h3 align="center">Apache HTTP Server Version 2.0</h3><a href="./"><img src="../images/index.gif" alt="Index"/></a><a href="../"><img src="../images/home.gif" alt="Home"/></a></body></html>
1.1 httpd-2.0/docs/manual/mod/mod_status.html.en
Index: mod_status.html.en
===================================================================
<html xmlns="http://www.w3.org/TR/xhtml1/strict"><head><!--
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
This file is generated from xml source: DO NOT EDIT
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
--><title>mod_status- Apache HTTP Server</title><link href="../style/manual.css" type="text/css" rel="stylesheet"/></head><body><blockquote><div align="center"><img src="../images/sub.gif" alt="[APACHE DOCUMENTATION]"/><h3>Apache HTTP Server Version 2.0</h3></div><h1 align="center">Apache Module mod_status</h1><table cellspacing="1" cellpadding="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td valign="top"><span class="help">Description:</span></td><td>Provides information on server activity and
performance</td></tr><tr><td><a href="module-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="module-dict.html#ModuleIdentifier" class="help">Module Identifier:</a></td><td>status_module</td></tr></table></td></tr></table><h2>Summary</h2>
<blockquote><table><tr><td bgcolor="#e0e5f5">
<strong>Warning:</strong> This document has not been updated
to take into account changes made in the 2.0 version of the
Apache HTTP Server. Some of the information may still be
relevant, but please use it with care.
</td></tr></table></blockquote>
<p>The Status module allows a server administrator to find out
how well their server is performing. A HTML page is presented
that gives the current server statistics in an easily readable
form. If required this page can be made to automatically
refresh (given a compatible browser). Another page gives a
simple machine-readable list of the current server state.</p>
<p>The details given are:</p>
<ul>
<li>The number of children serving requests</li>
<li>The number of idle children</li>
<li>The status of each child, the number of requests that
child has performed and the total number of bytes served by
the child (*)</li>
<li>A total number of accesses and byte count served (*)</li>
<li>The time the server was started/restarted and the time it
has been running for</li>
<li>Averages giving the number of requests per second, the
number of bytes served per second and the average number of
bytes per request (*)</li>
<li>The current percentage CPU used by each child and in
total by Apache (*)</li>
<li>The current hosts and requests being processed (*)</li>
</ul>
<p>A compile-time option must be used to display the details
marked "(*)" as the instrumentation required for obtaining
these statistics does not exist within standard Apache.</p>
<h2>Directives</h2><ul><li><a href="#extendedstatus">ExtendedStatus</a></li></ul><h2>Enabling Status Support</h2>
<p>To enable status reports only for browsers from the foo.com
domain add this code to your <code>httpd.conf</code>
configuration file</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
<Location /server-status><br>
SetHandler server-status<br>
<br>
Order Deny,Allow<br>
Deny from all<br>
Allow from .foo.com<br>
</Location>
</code></td></tr></table></blockquote>
<p>You can now access server statistics by using a Web browser
to access the page
<code>http://your.server.name/server-status</code></p>
<blockquote><table><tr><td bgcolor="#e0e5f5"><p>Note that <code><a href="mod_status.html">mod_status</a></code> will only work
when you are running Apache in <a href="core.html#servertype">standalone</a> mode and not
<a href="core.html#servertype">inetd</a> mode.</p></td></tr></table></blockquote>
<h2>Automatic Updates</h2>
<p>You can get the status page to update itself automatically if
you have a browser that supports "refresh". Access the page
<code>http://your.server.name/server-status?refresh=N</code> to
refresh the page every N seconds.</p>
<h2>Machine Readable Status File</h2>
<p>A machine-readable version of the status file is available by
accessing the page
<code>http://your.server.name/server-status?auto</code>. This
is useful when automatically run, see the Perl program in the
<code>/support</code> directory of Apache,
<code>log_server_status</code>.</p>
<blockquote><table><tr><td bgcolor="#e0e5f5">
<strong>It should be noted that if <code><a href="mod_status.html">mod_status</a></code> is
compiled into the server, its handler capability is available
in <em>all</em> configuration files, including
<em>per</em>-directory files (<em>e.g.</em>,
<code>.htaccess</code>). This may have security-related
ramifications for your site.</strong>
</td></tr></table></blockquote>
<hr/><h2><a name="ExtendedStatus">ExtendedStatus</a> <a name="extendedstatus">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>This directive controls whether the server keeps track of
extended status information for each request. This is only
useful if the status module is enabled on the server.</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>ExtendedStatus On|Off</td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>ExtendedStatus Off</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_status</td></tr><tr><td align="left" valign="top"><a href="directive-dict.html#Compatibility" class="help">Compatibility:</a></td><td>ExtendedStatus is only available in Apache 1.3.2 and
later.</td></tr></table></td></tr></table>
<p>This setting applies to the entire server, and cannot be
enabled or disabled on a virtualhost-by-virtualhost basis.</p>
<hr/></blockquote><h3 align="center">Apache HTTP Server Version 2.0</h3><a href="./"><img src="../images/index.gif" alt="Index"/></a><a href="../"><img src="../images/home.gif" alt="Home"/></a></body></html>
1.1 httpd-2.0/docs/manual/mod/mod_suexec.html.en
Index: mod_suexec.html.en
===================================================================
<html xmlns="http://www.w3.org/TR/xhtml1/strict"><head><!--
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
This file is generated from xml source: DO NOT EDIT
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
--><title>mod_suexec- Apache HTTP Server</title><link href="../style/manual.css" type="text/css" rel="stylesheet"/></head><body><blockquote><div align="center"><img src="../images/sub.gif" alt="[APACHE DOCUMENTATION]"/><h3>Apache HTTP Server Version 2.0</h3></div><h1 align="center">Apache Module mod_suexec</h1><table cellspacing="1" cellpadding="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td valign="top"><span class="help">Description:</span></td><td>Allows CGI scripts to run as a specified user
and Group</td></tr><tr><td><a href="module-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="module-dict.html#ModuleIdentifier" class="help">Module Identifier:</a></td><td>suexec_module</td></tr><tr><td align="left" valign="top"><a href="module-dict.html#Compatibility" class="help">Compatibility:</a></td><td><compatibility>Available in Apache 2.0 and later</compatibility></td></tr></table></td></tr></table><h2>Summary</h2>
<p>This module allows CGI scripts to run as a specified user
and Group.</p>
<h2>Directives</h2><ul><li><a href="#suexecusergroup">SuexecUserGroup</a></li></ul><hr/><h2><a name="SuexecUserGroup">SuexecUserGroup</a> <a name="suexecusergroup">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td/></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>SuexecUserGroup <em>User Group</em></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>None</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_suexec</td></tr><tr><td align="left" valign="top"><a href="directive-dict.html#Compatibility" class="help">Compatibility:</a></td><td>SuexecUserGroup is only available in 2.0 and
later.</td></tr></table></td></tr></table>
<p>The <code class="directive">SuexecUserGroup</code> directive allows you to
specify a user and group for CGI programs to run as. Non-CGI
requests are still processes with the user specified in the
User directive. This directive replaces using the User and
Group directives inside of VirtualHosts.</p>
<hr/></blockquote><h3 align="center">Apache HTTP Server Version 2.0</h3><a href="./"><img src="../images/index.gif" alt="Index"/></a><a href="../"><img src="../images/home.gif" alt="Home"/></a></body></html>
1.1 httpd-2.0/docs/manual/mod/mod_unique_id.html.en
Index: mod_unique_id.html.en
===================================================================
<html xmlns="http://www.w3.org/TR/xhtml1/strict"><head><!--
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
This file is generated from xml source: DO NOT EDIT
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
--><title>mod_unique_id- Apache HTTP Server</title><link href="../style/manual.css" type="text/css" rel="stylesheet"/></head><body><blockquote><div align="center"><img src="../images/sub.gif" alt="[APACHE DOCUMENTATION]"/><h3>Apache HTTP Server Version 2.0</h3></div><h1 align="center">Apache Module mod_unique_id</h1><table cellspacing="1" cellpadding="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td valign="top"><span class="help">Description:</span></td><td>Provides an environment variable with a unique
identifier for each request</td></tr><tr><td><a href="module-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="module-dict.html#ModuleIdentifier" class="help">Module Identifier:</a></td><td>unique_id_module</td></tr></table></td></tr></table><h2>Summary</h2>
<p>This module provides a magic token for each request which is
guaranteed to be unique across "all" requests under very
specific conditions. The unique identifier is even unique
across multiple machines in a properly configured cluster of
machines. The environment variable <code>UNIQUE_ID</code> is
set to the identifier for each request. Unique identifiers are
useful for various reasons which are beyond the scope of this
document.</p>
<h2>Directives</h2><p/><h2>Theory</h2>
<p>First a brief recap of how the Apache server works on Unix
machines. This feature currently isn't supported on Windows NT.
On Unix machines, Apache creates several children, the children
process requests one at a time. Each child can serve multiple
requests in its lifetime. For the purpose of this discussion,
the children don't share any data with each other. We'll refer
to the children as httpd processes.</p>
<p>Your website has one or more machines under your
administrative control, together we'll call them a cluster of
machines. Each machine can possibly run multiple instances of
Apache. All of these collectively are considered "the
universe", and with certain assumptions we'll show that in this
universe we can generate unique identifiers for each request,
without extensive communication between machines in the
cluster.</p>
<p>The machines in your cluster should satisfy these
requirements. (Even if you have only one machine you should
synchronize its clock with NTP.)</p>
<ul>
<li>The machines' times are synchronized via NTP or other
network time protocol.</li>
<li>The machines' hostnames all differ, such that the module
can do a hostname lookup on the hostname and receive a
different IP address for each machine in the cluster.</li>
</ul>
<p>As far as operating system assumptions go, we assume that
pids (process ids) fit in 32-bits. If the operating system uses
more than 32-bits for a pid, the fix is trivial but must be
performed in the code.</p>
<p>Given those assumptions, at a single point in time we can
identify any httpd process on any machine in the cluster from
all other httpd processes. The machine's IP address and the pid
of the httpd process are sufficient to do this. So in order to
generate unique identifiers for requests we need only
distinguish between different points in time.</p>
<p>To distinguish time we will use a Unix timestamp (seconds
since January 1, 1970 UTC), and a 16-bit counter. The timestamp
has only one second granularity, so the counter is used to
represent up to 65536 values during a single second. The
quadruple <em>( ip_addr, pid, time_stamp, counter )</em> is
sufficient to enumerate 65536 requests per second per httpd
process. There are issues however with pid reuse over time, and
the counter is used to alleviate this issue.</p>
<p>When an httpd child is created, the counter is initialized
with ( current microseconds divided by 10 ) modulo 65536 (this
formula was chosen to eliminate some variance problems with the
low order bits of the microsecond timers on some systems). When
a unique identifier is generated, the time stamp used is the
time the request arrived at the web server. The counter is
incremented every time an identifier is generated (and allowed
to roll over).</p>
<p>The kernel generates a pid for each process as it forks the
process, and pids are allowed to roll over (they're 16-bits on
many Unixes, but newer systems have expanded to 32-bits). So
over time the same pid will be reused. However unless it is
reused within the same second, it does not destroy the
uniqueness of our quadruple. That is, we assume the system does
not spawn 65536 processes in a one second interval (it may even
be 32768 processes on some Unixes, but even this isn't likely
to happen).</p>
<p>Suppose that time repeats itself for some reason. That is,
suppose that the system's clock is screwed up and it revisits a
past time (or it is too far forward, is reset correctly, and
then revisits the future time). In this case we can easily show
that we can get pid and time stamp reuse. The choice of
initializer for the counter is intended to help defeat this.
Note that we really want a random number to initialize the
counter, but there aren't any readily available numbers on most
systems (<em>i.e.</em>, you can't use rand() because you need
to seed the generator, and can't seed it with the time because
time, at least at one second resolution, has repeated itself).
This is not a perfect defense.</p>
<p>How good a defense is it? Suppose that one of your machines
serves at most 500 requests per second (which is a very
reasonable upper bound at this writing, because systems
generally do more than just shovel out static files). To do
that it will require a number of children which depends on how
many concurrent clients you have. But we'll be pessimistic and
suppose that a single child is able to serve 500 requests per
second. There are 1000 possible starting counter values such
that two sequences of 500 requests overlap. So there is a 1.5%
chance that if time (at one second resolution) repeats itself
this child will repeat a counter value, and uniqueness will be
broken. This was a very pessimistic example, and with real
world values it's even less likely to occur. If your system is
such that it's still likely to occur, then perhaps you should
make the counter 32 bits (by editing the code).</p>
<p>You may be concerned about the clock being "set back" during
summer daylight savings. However this isn't an issue because
the times used here are UTC, which "always" go forward. Note
that x86 based Unixes may need proper configuration for this to
be true -- they should be configured to assume that the
motherboard clock is on UTC and compensate appropriately. But
even still, if you're running NTP then your UTC time will be
correct very shortly after reboot.</p>
<p>The <code>UNIQUE_ID</code> environment variable is
constructed by encoding the 112-bit (32-bit IP address, 32 bit
pid, 32 bit time stamp, 16 bit counter) quadruple using the
alphabet <code>[A-Za-z0-9@-]</code> in a manner similar to MIME
base64 encoding, producing 19 characters. The MIME base64
alphabet is actually <code>[A-Za-z0-9+/]</code> however
<code>+</code> and <code>/</code> need to be specially encoded
in URLs, which makes them less desirable. All values are
encoded in network byte ordering so that the encoding is
comparable across architectures of different byte ordering. The
actual ordering of the encoding is: time stamp, IP address,
pid, counter. This ordering has a purpose, but it should be
emphasized that applications should not dissect the encoding.
Applications should treat the entire encoded
<code>UNIQUE_ID</code> as an opaque token, which can be
compared against other <code>UNIQUE_ID</code>s for equality
only.</p>
<p>The ordering was chosen such that it's possible to change
the encoding in the future without worrying about collision
with an existing database of <code>UNIQUE_ID</code>s. The new
encodings should also keep the time stamp as the first element,
and can otherwise use the same alphabet and bit length. Since
the time stamps are essentially an increasing sequence, it's
sufficient to have a <em>flag second</em> in which all machines
in the cluster stop serving and request, and stop using the old
encoding format. Afterwards they can resume requests and begin
issuing the new encodings.</p>
<p>This we believe is a relatively portable solution to this
problem. It can be extended to multithreaded systems like
Windows NT, and can grow with future needs. The identifiers
generated have essentially an infinite life-time because future
identifiers can be made longer as required. Essentially no
communication is required between machines in the cluster (only
NTP synchronization is required, which is low overhead), and no
communication between httpd processes is required (the
communication is implicit in the pid value assigned by the
kernel). In very specific situations the identifier can be
shortened, but more information needs to be assumed (for
example the 32-bit IP address is overkill for any site, but
there is no portable shorter replacement for it). </p>
<hr/></blockquote><h3 align="center">Apache HTTP Server Version 2.0</h3><a href="./"><img src="../images/index.gif" alt="Index"/></a><a href="../"><img src="../images/home.gif" alt="Home"/></a></body></html>
1.1 httpd-2.0/docs/manual/mod/mod_userdir.html.en
Index: mod_userdir.html.en
===================================================================
<html xmlns="http://www.w3.org/TR/xhtml1/strict"><head><!--
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
This file is generated from xml source: DO NOT EDIT
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
--><title>mod_userdir- Apache HTTP Server</title><link href="../style/manual.css" type="text/css" rel="stylesheet"/></head><body><blockquote><div align="center"><img src="../images/sub.gif" alt="[APACHE DOCUMENTATION]"/><h3>Apache HTTP Server Version 2.0</h3></div><h1 align="center">Apache Module mod_userdir</h1><table cellspacing="1" cellpadding="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td valign="top"><span class="help">Description:</span></td><td>Provides for user-specific
directories</td></tr><tr><td><a href="module-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="module-dict.html#ModuleIdentifier" class="help">Module Identifier:</a></td><td>userdir_module</td></tr></table></td></tr></table><h2>Summary</h2>
<h2>Directives</h2><ul><li><a href="#userdir">UserDir</a></li></ul><hr/><h2><a name="UserDir">UserDir</a> <a name="userdir">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Sets the directory from which to serve files when requests
for a particular user are received, denoted by requests containing
~username, such as
http://server.example.com/~bob/</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>UserDir <em>directory-filename</em></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>UserDir public_html</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual
host</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Base</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_userdir</td></tr><tr><td align="left" valign="top"><a href="directive-dict.html#Compatibility" class="help">Compatibility:</a></td><td>All forms except the UserDir public_html
form are only available in Apache 1.1 or above. Use of the
enabled keyword, or disabled with a
list of usernames, is only available in Apache 1.3 and
above.</td></tr></table></td></tr></table>
<p>The <code class="directive">UserDir</code> directive sets the real
directory in a user's home directory to use when a request for a
document for a user is received. <em>Directory-filename</em> is
one of the following:</p>
<ul>
<li>The name of a directory or a pattern such as those shown
below.</li>
<li>The keyword <code>disabled</code>. This turns off
<em>all</em> username-to-directory translations except those
explicitly named with the <code>enabled</code> keyword (see
below).</li>
<li>The keyword <code>disabled</code> followed by a
space-delimited list of usernames. Usernames that appear in
such a list will <em>never</em> have directory translation
performed, even if they appear in an <code>enabled</code>
clause.</li>
<li>The keyword <code>enabled</code> followed by a
space-delimited list of usernames. These usernames will have
directory translation performed even if a global disable is
in effect, but not if they also appear in a
<code>disabled</code> clause.</li>
</ul>
<p>If neither the <code>enabled</code> nor the
<code>disabled</code> keywords appear in the
<code>Userdir</code> directive, the argument is treated as a
filename pattern, and is used to turn the name into a directory
specification. A request for
<code>http://www.foo.com/~bob/one/two.html</code> will be
translated to:</p>
<table>
<tr><th>UserDir directive used</th>
<th>Translated path</th></tr>
<tr><td>UserDir public_html</td><td>~bob/public_html/one/two.html</td></tr>
<tr><td>UserDir /usr/web</td><td>/usr/web/bob/one/two.html</td></tr>
<tr><td>UserDir /home/*/www</td><td>/home/bob/www/one/two.html</td></tr>
</table>
<p>The following directives will send redirects to the client:</p>
<table>
<tr><th>UserDir directive used</th>
<th>Translated path</th></tr>
<tr><td>UserDir http://www.foo.com/users</td><td>http://www.foo.com/users/bob/one/two.html</td></tr>
<tr><td>UserDir
http://www.foo.com/*/usr</td><td>http://www.foo.com/bob/usr/one/two.html</td></tr>
<tr><td>UserDir
http://www.foo.com/~*/</td><td>http://www.foo.com/~bob/one/two.html</td></tr>
</table>
<blockquote><table><tr><td bgcolor="#e0e5f5">
<strong>Be careful when using this directive; for instance,
<code>"UserDir ./"</code> would map
<code>"/~root"</code> to <code>"/"</code> - which is probably
undesirable. If you are running Apache 1.3 or above, it is
strongly recommended that your configuration include a
"<code>UserDir disabled root</code>" declaration.
See also the <a href="core.html#directory" class="directive"><code class="directive">Directory</code></a>
directive and the <a href="../misc/security_tips.html">Security
Tips</a> page for more information.</strong>
</td></tr></table></blockquote>
<p>Additional examples:</p>
<p>To allow a few users to have <code>UserDir</code> directories, but
not anyone else, use the following:</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
UserDir disabled<br>
UserDir enabled user1 user2 user3
</code></td></tr></table></blockquote>
<p>To allow most users to have <code>UserDir</code> directories, but
deny this to a few, use the following:</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
UserDir enabled<br>
UserDir disabled user4 user5 user6
</code></td></tr></table></blockquote>
<hr/></blockquote><h3 align="center">Apache HTTP Server Version 2.0</h3><a href="./"><img src="../images/index.gif" alt="Index"/></a><a href="../"><img src="../images/home.gif" alt="Home"/></a></body></html>
1.1 httpd-2.0/docs/manual/mod/mod_usertrack.html.en
Index: mod_usertrack.html.en
===================================================================
<html xmlns="http://www.w3.org/TR/xhtml1/strict"><head><!--
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
This file is generated from xml source: DO NOT EDIT
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
--><title>mod_usertrack- Apache HTTP Server</title><link href="../style/manual.css" type="text/css" rel="stylesheet"/></head><body><blockquote><div align="center"><img src="../images/sub.gif" alt="[APACHE DOCUMENTATION]"/><h3>Apache HTTP Server Version 2.0</h3></div><h1 align="center">Apache Module mod_usertrack</h1><table cellspacing="1" cellpadding="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td valign="top"><span class="help">Description:</span></td><td>
This module uses cookies to provide for a
<em>clickstream</em> log of user activity on a site.
</td></tr><tr><td><a href="module-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="module-dict.html#ModuleIdentifier" class="help">Module Identifier:</a></td><td>usertrack_module</td></tr><tr><td align="left" valign="top"><a href="module-dict.html#Compatibility" class="help">Compatibility:</a></td><td><compatibility>Known as mod_cookies prior to Apache 1.3.</compatibility></td></tr></table></td></tr></table><h2>Summary</h2>
<p>Previous releases of Apache have included a module which
generates a 'clickstream' log of user activity on a site using
cookies. This was called the "cookies" module, mod_cookies. In
Apache 1.2 and later this module has been renamed the "user
tracking" module, mod_usertrack. This module has been
simplified and new directives added.</p>
<h2>Directives</h2><ul><li><a href="#cookiedomain">CookieDomain</a></li><li><a href="#cookieexpires">CookieExpires</a></li><li><a href="#cookiename">CookieName</a></li><li><a href="#cookiestyle">CookieStyle</a></li><li><a href="#cookietracking">CookieTracking</a></li></ul><h2>Logging</h2>
<p>Previously, the cookies module (now the user tracking
module) did its own logging, using the <code class="directive">CookieLog</code>
directive. In this release, this module does no logging at all.
Instead, a configurable log format file should be used to log
user click-streams. This is possible because the logging module
now allows multiple log files. The cookie itself is logged by
using the text <code>%{cookie}n</code> in the log file format. For
example:</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
CustomLog logs/clickstream "%{cookie}n %r %t"
</code></td></tr></table></blockquote>
<p>For backward compatibility the configurable log module
implements the old <code class="directive">CookieLog</code> directive, but this
should be upgraded to the above <code class="directive">CustomLog</code> directive. </p>
<h2>2-digit or 4-digit dates for cookies?</h2>
<p>(the following is from message
<022701bda43d$9d32bbb0$1201a8c0@christian.office.sane.com>
in the new-httpd archives) </p>
<pre>
From: "Christian Allen" <christian@sane.com>
Subject: Re: Apache Y2K bug in mod_usertrack.c
Date: Tue, 30 Jun 1998 11:41:56 -0400
Did some work with cookies and dug up some info that might be useful.
True, Netscape claims that the correct format NOW is four digit dates, and
four digit dates do in fact work... for Netscape 4.x (Communicator), that
is. However, 3.x and below do NOT accept them. It seems that Netscape
originally had a 2-digit standard, and then with all of the Y2K hype and
probably a few complaints, changed to a four digit date for Communicator.
Fortunately, 4.x also understands the 2-digit format, and so the best way to
ensure that your expiration date is legible to the client's browser is to
use 2-digit dates.
However, this does not limit expiration dates to the year 2000; if you use
an expiration year of "13", for example, it is interpreted as 2013, NOT
1913! In fact, you can use an expiration year of up to "37", and it will be
understood as "2037" by both MSIE and Netscape versions 3.x and up (not sure
about versions previous to those). Not sure why Netscape used that
particular year as its cut-off point, but my guess is that it was in respect
to UNIX's 2038 problem. Netscape/MSIE 4.x seem to be able to understand
2-digit years beyond that, at least until "50" for sure (I think they
understand up until about "70", but not for sure).
Summary: Mozilla 3.x and up understands two digit dates up until "37"
(2037). Mozilla 4.x understands up until at least "50" (2050) in 2-digit
form, but also understands 4-digit years, which can probably reach up until
9999. Your best bet for sending a long-life cookie is to send it for some
time late in the year "37".
</pre>
<hr/><h2><a name="CookieDomain">CookieDomain</a> <a name="cookiedomain">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>controls the setting of the domain to which the tracking cookie applies.</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>CookieDomain <em>domain</em></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>None</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host, directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_usertrack</td></tr></table></td></tr></table>
<p>This directive controls the setting of the domain to which
the tracking cookie applies. If not present, no domain is
included in the cookie header field.</p>
<p>The domain string <strong>must</strong> begin with a dot, and
<strong>must</strong> include at least one embedded dot. That is,
".foo.com" is legal, but "foo.bar.com" and ".com" are not.</p>
<hr/><h2><a name="CookieExpires">CookieExpires</a> <a name="cookieexpires">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td/></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>CookieExpires <em>expiry-period</em></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code/></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host, directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td/></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_usertrack</td></tr><tr><td align="left" valign="top"><a href="directive-dict.html#Compatibility" class="help">Compatibility:</a></td><td>In 1.3.20 and earlier, not usable in directory and
.htaccess</td></tr></table></td></tr></table>
<p>When used, this directive sets an expiry time on the cookie
generated by the usertrack module. The <em>expiry-period</em>
can be given either as a number of seconds, or in the format
such as "2 weeks 3 days 7 hours". Valid denominations are:
years, months, weeks, hours, minutes and seconds. If the expiry
time is in any format other than one number indicating the
number of seconds, it must be enclosed by double quotes.</p>
<p>If this directive is not used, cookies last only for the
current browser session.</p>
<hr/><h2><a name="CookieName">CookieName</a> <a name="cookiename">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td/></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>CookieName <em>token</em></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>Apache</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host, directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_usertrack</td></tr></table></td></tr></table>
<p>This directive allows you to change the name of the cookie
this module uses for its tracking purposes. By default the
cookie is named "<code>Apache</code>".</p>
<p>You must specify a valid cookie name; results are
unpredictable if you use a name containing unusual characters.
Valid characters include A-Z, a-z, 0-9, "_", and "-".</p>
<hr/><h2><a name="CookieStyle">CookieStyle</a> <a name="cookiestyle">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Controls the format of the cookie header field</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>CookieStyle
<em>Netscape|Cookie|Cookie2|RFC2109|RFC2965</em></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code/></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host, directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_usertrack</td></tr></table></td></tr></table>
<p>This directive controls the format of the cookie header
field. The three formats allowed are:</p>
<ul>
<li><strong>Netscape</strong>, which is the original but now deprecated
syntax. This is the default, and the syntax Apache has
historically used.</li>
<li><strong>Cookie</strong> or <strong>RFC2109</strong>, which is the syntax that
superseded the Netscape syntax.</li>
<li><strong>Cookie2</strong> or <strong>RFC2965</strong>, which is the most
current cookie syntax.</li>
</ul>
<p>Not all clients can understand all of these formats. but you
should use the newest one that is generally acceptable to your
users' browsers.</p>
<hr/><h2><a name="CookieTracking">CookieTracking</a> <a name="cookietracking">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td/></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>CookieTracking on|off</td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code/></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host, directory, .htaccess</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td>FileInfo</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_usertrack</td></tr></table></td></tr></table>
<p>When the user track module is compiled in, and
"CookieTracking on" is set, Apache will start sending a
user-tracking cookie for all new requests. This directive can
be used to turn this behavior on or off on a per-server or
per-directory basis. By default, compiling mod_usertrack will
not activate cookies. </p>
<hr/></blockquote><h3 align="center">Apache HTTP Server Version 2.0</h3><a href="./"><img src="../images/index.gif" alt="Index"/></a><a href="../"><img src="../images/home.gif" alt="Home"/></a></body></html>
1.1 httpd-2.0/docs/manual/mod/mod_vhost_alias.html.en
Index: mod_vhost_alias.html.en
===================================================================
<html xmlns="http://www.w3.org/TR/xhtml1/strict"><head><!--
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
This file is generated from xml source: DO NOT EDIT
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
--><title>mod_vhost_alias- Apache HTTP Server</title><link href="../style/manual.css" type="text/css" rel="stylesheet"/></head><body><blockquote><div align="center"><img src="../images/sub.gif" alt="[APACHE DOCUMENTATION]"/><h3>Apache HTTP Server Version 2.0</h3></div><h1 align="center">Apache Module mod_vhost_alias</h1><table cellspacing="1" cellpadding="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td valign="top"><span class="help">Description:</span></td><td>Provides for <a href="../vhosts/mass.html">dynamically configured mass virtual
hosting</a></td></tr><tr><td><a href="module-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="module-dict.html#ModuleIdentifier" class="help">Module Identifier:</a></td><td>vhost_alias_module</td></tr></table></td></tr></table><h2>Summary</h2>
<p>This module creates dynamically configured virtual hosts, by
allowing the IP address and/or the <code>Host:</code> header of
the HTTP request to be used as part of the pathname to
determine what files to serve. This allows for easy use of a
huge number of virtual hosts with similar configurations.</p>
<h2>Directives</h2><ul><li><a href="#virtualdocumentroot">VirtualDocumentRoot</a></li><li><a href="#virtualdocumentrootip">VirtualDocumentRootIP</a></li><li><a href="#virtualscriptalias">VirtualScriptAlias</a></li><li><a href="#virtualscriptaliasip">VirtualScriptAliasIP</a></li></ul><p><strong>See also </strong></p><ul><li><a href="core.html#usecanonicalname" class="directive"><code class="directive">UseCanonicalName</code></a>.</li></ul><h2>Directory Name Interpolation</h2>
<p>All the directives in this module interpolate a string into
a pathname. The interpolated string (henceforth called the
"name") may be either the server name (see the <a href="core.html#usecanonicalname"><code>UseCanonicalName</code></a>
directive for details on how this is determined) or the IP
address of the virtual host on the server in dotted-quad
format. The interpolation is controlled by specifiers inspired
by <code>printf</code> which have a number of formats:</p>
<table>
<tr><td><code>%%</code></td>
<td>insert a <code>%</code></td></tr>
<tr><td><code>%p</code></td>
<td>insert the port number of the virtual host</td></tr>
<tr><td><code>%N.M</code></td>
<td>insert (part of) the name</td></tr>
</table>
<p><code>N</code> and <code>M</code> are used to specify
substrings of the name. <code>N</code> selects from the
dot-separated components of the name, and <code>M</code>
selects characters within whatever <code>N</code> has selected.
<code>M</code> is optional and defaults to zero if it isn't
present; the dot must be present if and only if <code>M</code>
is present. The interpretation is as follows:</p>
<table>
<tr><td><code>0</code></td>
<td>the whole name</td></tr>
<tr><td><code>1</code></td>
<td>the first part</td></tr>
<tr><td><code>2</code></td>
<td>the second part</td></tr>
<tr><td><code>-1</code></td>
<td>the last part</td></tr>
<tr><td><code>-2</code></td>
<td>the penultimate part</td></tr>
<tr><td><code>2+</code></td>
<td>the second and all subsequent parts</td></tr>
<tr><td><code>-2+</code></td>
<td>the penultimate and all preceding parts</td></tr>
<tr><td><code>1+</code> and <code>-1+</code></td>
<td>the same as <code>0</code></td></tr>
</table>
<p>If <code>N</code> or <code>M</code> is greater than the number
of parts available a single underscore is interpolated. </p>
<h2>Examples</h2>
<p>For simple name-based virtual hosts you might use the
following directives in your server configuration file:</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
UseCanonicalName Off<br>
VirtualDocumentRoot /usr/local/apache/vhosts/%0
</code></td></tr></table></blockquote>
<p>A request for
<code>http://www.example.com/directory/file.html</code> will be
satisfied by the file
<code>/usr/local/apache/vhosts/www.example.com/directory/file.html</code>.
</p>
<p>For a very large number of virtual hosts it is a good idea
to arrange the files to reduce the size of the
<code>vhosts</code> directory. To do this you might use the
following in your configuration file:</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
UseCanonicalName Off<br>
VirtualDocumentRoot /usr/local/apache/vhosts/%3+/%2.1/%2.2/%2.3/%2
</code></td></tr></table></blockquote>
<p>A request for
<code>http://www.example.isp.com/directory/file.html</code>
will be satisfied by the file
<code>/usr/local/apache/vhosts/isp.com/e/x/a/example/directory/file.html</code>.</p>
<p>A more even spread of files can be achieved by hashing from the
end of the name, for example: </p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
VirtualDocumentRoot /usr/local/apache/vhosts/%3+/%2.-1/%2.-2/%2.-3/%2
</code></td></tr></table></blockquote>
<p>The example request would come from
<code>/usr/local/apache/vhosts/isp.com/e/l/p/example/directory/file.html</code>.</p>
<p>Alternatively you might use: </p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
VirtualDocumentRoot /usr/local/apache/vhosts/%3+/%2.1/%2.2/%2.3/%2.4+
</code></td></tr></table></blockquote>
<p>The example request would come from
<code>/usr/local/apache/vhosts/isp.com/e/x/a/mple/directory/file.html</code>.</p>
<p>For IP-based virtual hosting you might use the following in
your configuration file:</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
UseCanonicalName DNS<br>
VirtualDocumentRootIP /usr/local/apache/vhosts/%1/%2/%3/%4/docs<br>
VirtualScriptAliasIP /usr/local/apache/vhosts/%1/%2/%3/%4/cgi-bin
</code></td></tr></table></blockquote>
<p>A request for
<code>http://www.example.isp.com/directory/file.html</code>
would be satisfied by the file
<code>/usr/local/apache/vhosts/10/20/30/40/docs/directory/file.html</code>
if the IP address of <code>www.example.com</code> were
10.20.30.40. A request for
<code>http://www.example.isp.com/cgi-bin/script.pl</code> would
be satisfied by executing the program
<code>/usr/local/apache/vhosts/10/20/30/40/cgi-bin/script.pl</code>.</p>
<p>If you want to include the <code>.</code> character in a
<code>VirtualDocumentRoot</code> directive, but it clashes with
a <code>%</code> directive, you can work around the problem in
the following way:</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
VirtualDocumentRoot /usr/local/apache/vhosts/%2.0.%3.0
</code></td></tr></table></blockquote>
<p>A request for
<code>http://www.example.isp.com/directory/file.html</code>
will be satisfied by the file
<code>/usr/local/apache/vhosts/example.isp/directory/file.html</code>.</p>
<p>The <a href="mod_log_config.html#logformat" class="directive"><code class="directive">LogFormat</code></a>
directives <code>%V</code> and <code>%A</code> are useful
in conjunction with this module.</p>
<hr/><h2><a name="VirtualDocumentRoot">VirtualDocumentRoot</a> <a name="virtualdocumentroot">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Dynamically configure the location of the document root
for a given virtual host</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>VirtualDocumentRoot <em>interpolated-directory</em></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>none</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td/></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_vhost_alias</td></tr><tr><td align="left" valign="top"><a href="directive-dict.html#Compatibility" class="help">Compatibility:</a></td><td>VirtualDocumentRoot is only available in 1.3.7 and
later.</td></tr></table></td></tr></table>
<p>The <code>VirtualDocumentRoot</code> directive allows you to
determine where Apache will find your documents based on the
value of the server name. The result of expanding
<em>interpolated-directory</em> is used as the root of the
document tree in a similar manner to the <a href="core.html#documentroot" class="directive"><code class="directive">DocumentRoot</code></a> directive's argument.
If <em>interpolated-directory</em> is <code>none</code> then
<code>VirtaulDocumentRoot</code> is turned off. This directive
cannot be used in the same context as
<code class="directive">VirtualDocumentRootIP</code>.</p>
<hr/><h2><a name="VirtualDocumentRootIP">VirtualDocumentRootIP</a> <a name="virtualdocumentrootip">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Dynamically configure the location of the document root
for a given virtual host</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>VirtualDocumentRootIP <em>interpolated-directory</em></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>none</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td/></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_vhost_alias</td></tr><tr><td align="left" valign="top"><a href="directive-dict.html#Compatibility" class="help">Compatibility:</a></td><td>VirtualDocumentRootIP is only available in 1.3.7
and later.</td></tr></table></td></tr></table>
<p>The <code>VirtualDocumentRootIP</code> directive is like the
<code class="directive">VirtualDocumentRoot</code>
directive, except that it uses the IP address of the server end
of the connection instead of the server name.</p>
<hr/><h2><a name="VirtualScriptAlias">VirtualScriptAlias</a> <a name="virtualscriptalias">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Dynamically configure the location of the CGI directory for
a given virtual host</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>VirtualScriptAlias <em>interpolated-directory</em></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>none</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td/></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_vhost_alias</td></tr><tr><td align="left" valign="top"><a href="directive-dict.html#Compatibility" class="help">Compatibility:</a></td><td>VirtualScriptAlias is only available in 1.3.7
and later.</td></tr></table></td></tr></table>
<p>The <code>VirtualScriptAlias</code> directive allows you to
determine where Apache will find CGI scripts in a similar
manner to <code class="directive">VirtualDocumentRoot</code>
does for other documents. It matches requests for URIs starting
<code>/cgi-bin/</code>, much like <a href="mod_alias.html#scriptalias" class="directive"><code class="directive">ScriptAlias</code></a>
<code>/cgi-bin/</code> would.</p>
<hr/><h2><a name="VirtualScriptAliasIP">VirtualScriptAliasIP</a> <a name="virtualscriptaliasip">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Dynamically configure the location of the cgi directory for
a given virtual host</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>VirtualScriptAliasIP <em>interpolated-directory</em></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>none</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host</td></tr><tr><td><a href="directive-dict.html#Override" class="help">Override:</a></td><td/></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>Extension</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mod_vhost_alias</td></tr><tr><td align="left" valign="top"><a href="directive-dict.html#Compatibility" class="help">Compatibility:</a></td><td>VirtualScriptAliasIP is only available in 1.3.7
and later.</td></tr></table></td></tr></table>
<p>The <code>VirtualScriptAliasIP</code> directive is like the
<a href="#virtualscriptalias"><code>VirtualScriptAlias</code></a>
directive, except that it uses the IP address of the server end
of the connection instead of the server name.</p>
<hr/></blockquote><h3 align="center">Apache HTTP Server Version 2.0</h3><a href="./"><img src="../images/index.gif" alt="Index"/></a><a href="../"><img src="../images/home.gif" alt="Home"/></a></body></html>
1.1 httpd-2.0/docs/manual/mod/mpm_common.html.en
Index: mpm_common.html.en
===================================================================
<html xmlns="http://www.w3.org/TR/xhtml1/strict"><head><!--
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
This file is generated from xml source: DO NOT EDIT
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
--><title>mpm_common- Apache HTTP Server</title><link href="../style/manual.css" type="text/css" rel="stylesheet"/></head><body><blockquote><div align="center"><img src="../images/sub.gif" alt="[APACHE DOCUMENTATION]"/><h3>Apache HTTP Server Version 2.0</h3></div><h1 align="center">Apache Module mpm_common</h1><table cellspacing="1" cellpadding="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td valign="top"><span class="help">Description:</span></td><td>A collection of directives that are implemented by
more than one multi-processing module (MPM)</td></tr><tr><td><a href="module-dict.html#Status" class="help">Status:</a></td><td>MPM</td></tr></table></td></tr></table><h2>Directives</h2><ul><li><a href="#coredumpdirectory">CoreDumpDirectory</a></li><li><a href="#group">Group</a></li><li><a href="#listen">Listen</a></li><li><a href="#listenbacklog">ListenBackLog</a></li><li><a href="#lockfile">LockFile</a></li><li><a href="#maxclients">MaxClients</a></li><li><a href="#maxrequestsperchild">MaxRequestsPerChild</a></li><li><a href="#maxsparethreads">MaxSpareThreads</a></li><li><a href="#maxthreadsperchild">MaxThreadsPerChild</a></li><li><a href="#minsparethreads">MinSpareThreads</a></li><li><a href="#numservers">NumServers</a></li><li><a href="#pidfile">PidFile</a></li><li><a href="#scoreboardfile">ScoreBoardFile</a></li><li><a href="#sendbuffersize">SendBufferSize</a></li><li><a href="#serverlimit">ServerLimit</a></li><li><a href="#startservers">StartServers</a></li><li><a href="#startthreads">StartThreads</a></li><li><a href="#threadlimit">ThreadLimit</a></li><li><a href="#threadsperchild">ThreadsPerChild</a></li><li><a href="#user">User</a></li></ul><hr/><h2><a name="CoreDumpDirectory">CoreDumpDirectory</a> <a name="coredumpdirectory">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Sets the directory where Apache attempts to
switch before dumping core</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>CoreDumpDirectory <em>directory</em></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>See usage for the default setting</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>MPM</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td><code><a href="worker.html">worker</a></code>, <code><a href="perchild.html">perchild</a></code>, <code><a href="prefork.html">prefork</a></code>, <code><a href="mpm_winnt.html">mpm_winnt</a></code></td></tr></table></td></tr></table>
<p>This controls the directory to which Apache attempts to
switch before dumping core. The default is in the
<a href="core.html#serverroot" class="directive"><code class="directive">ServerRoot</code></a> directory, however
since this should not be writable by the user the server runs
as, core dumps won't normally get written. If you want a core
dump for debugging, you can use this directive to place it in a
different location.</p>
<hr/><h2><a name="Group">Group</a> <a name="group">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Sets the group under which the server will answer
requests</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>Group <em>unix-group</em></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>Group #-1</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>MPM</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td><code><a href="worker.html">worker</a></code>, <code><a href="perchild.html">perchild</a></code>, <code><a href="prefork.html">prefork</a></code></td></tr></table></td></tr></table>
<p>The <code class="directive">Group</code> directive sets the group under
which the server will answer requests. In order to use this
directive, the stand-alone server must be run initially as root.
<em>Unix-group</em> is one of:</p>
<dl>
<dt>A group name</dt>
<dd>Refers to the given group by name.</dd>
<dt># followed by a group number.</dt>
<dd>Refers to a group by its number.</dd>
</dl>
<p>It is recommended that you set up a new group specifically for
running the server. Some admins use user <code>nobody</code>,
but this is not always possible or desirable.</p>
<p>Note: if you start the server as a non-root user, it will
fail to change to the specified group, and will instead
continue to run as the group of the original user.</p>
<p>Special note: Use of this directive in <VirtualHost> is
no longer supported. To implement the <a href="../suexec.html">suEXEC wrapper</a> with Apache 2.0, use the
<a href="mod_suexec.html#suexecusergroup" class="directive"><code class="directive">SuexecUserGroup</code></a>
directive. SECURITY: See <a href="#user" class="directive"><code class="directive">User</code></a> for a discussion of the
security considerations.</p>
<hr/><h2><a name="Listen">Listen</a> <a name="listen">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Sets the IP addresses and ports that the server
listens to</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>Listen [<em>IP-address</em>:]<em>portnumber</em></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>MPM</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td><code><a href="worker.html">worker</a></code>, <code><a href="perchild.html">perchild</a></code>, <code><a href="prefork.html">prefork</a></code>, <code><a href="mpm_winnt.html">mpm_winnt</a></code></td></tr></table></td></tr></table>
<p>The <code class="directive">Listen</code> directive instructs Apache to
listen to only specific IP addresses or ports; by default it
responds to requests on all IP interfaces. The Listen directive is
now a required directive. If it is not in the config file, the
server will fail to start. This is a change from previous versions
of Apache.</p>
<p>The Listen directive tells the server to accept incoming
requests on the specified port or address-and-port combination.
If only a port number is specified, the server listens to the
given port on all interfaces. If an IP address is given as well
as a port, the server will listen on the given port and
interface.</p>
<p>Multiple Listen directives may be used to specify a number
of addresses and ports to listen to. The server will respond to
requests from any of the listed addresses and ports.</p>
<p>For example, to make the server accept connections on both
port 80 and port 8000, use:</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
Listen 80<br>
Listen 8000
</code></td></tr></table></blockquote>
<p>To make the server accept connections on two specified
interfaces and port numbers, use </p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
Listen 192.170.2.1:80<br>
Listen 192.170.2.5:8000
</code></td></tr></table></blockquote>
<p>IPv6 addresses must be surrounded in square brackets, as in the
following example:</p>
<blockquote><table cellpadding="10"><tr><td bgcolor="#eeeeee"><code>
Listen [fe80::a00:20ff:fea7:ccea]:80
</code></td></tr></table></blockquote>
<p><strong>See also </strong></p><ul><li><a href="../dns-caveats.html">DNS Issues</a></li><li><a href="../bind.html">Setting
which addresses and ports Apache uses</a></li></ul><hr/><h2><a name="ListenBackLog">ListenBackLog</a> <a name="listenbacklog">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Maximum length of the queue of pending connections</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>ListenBacklog <em>backlog</em></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>ListenBacklog 511</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>MPM</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td><code><a href="worker.html">worker</a></code>, <code><a href="perchild.html">perchild</a></code>, <code><a href="prefork.html">prefork</a></code>, <code><a href="mpm_winnt.html">mpm_winnt</a></code></td></tr></table></td></tr></table>
<p>The maximum length of the queue of pending connections.
Generally no tuning is needed or desired, however on some
systems it is desirable to increase this when under a TCP SYN
flood attack. See the backlog parameter to the
<code>listen(2)</code> system call.</p>
<p>This will often be limited to a smaller number by the
operating system. This varies from OS to OS. Also note that
many OSes do not use exactly what is specified as the backlog,
but use a number based on (but normally larger than) what is
set.</p>
<hr/><h2><a name="LockFile">LockFile</a> <a name="lockfile">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Location of the accept serialization lock file</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>LockFile <em>filename</em></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>LockFile logs/accept.lock</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>MPM</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td><code><a href="worker.html">worker</a></code>, <code><a href="perchild.html">perchild</a></code>, <code><a href="prefork.html">prefork</a></code></td></tr></table></td></tr></table>
<p>The <code class="directive">LockFile</code> directive sets the path to
the lockfile used when Apache is compiled with either
USE_FCNTL_SERIALIZED_ACCEPT or USE_FLOCK_SERIALIZED_ACCEPT. This
directive should normally be left at its default value. The main
reason for changing it is if the <code>logs</code> directory is
NFS mounted, since <strong>the lockfile must be stored on a local
disk</strong>. The PID of the main server process is
automatically appended to the filename.</p>
<p><strong>SECURITY:</strong> It is best to avoid putting this
file 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>
<hr/><h2><a name="MaxClients">MaxClients</a> <a name="maxclients">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Maximum number of child processes that will be created
to serve requests</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>MaxClients <em>number</em></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>>MaxClients
8 (with threads) MaxClients 256</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>MPM</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td><code><a href="worker.html">worker</a></code>, <code><a href="prefork.html">prefork</a></code></td></tr></table></td></tr></table>
<p>The <code class="directive">MaxClients</code> directive sets the limit
on the number of child processes that will be created to serve
requests. When the server is built without threading, no more than
this number of clients can be served simultaneously. To configure
more than 256 clients with the prefork MPM, you must use the
<a href="#serverlimit" class="directive"><code class="directive">ServerLimit</code></a> directive.
To configure more than 1024 clients with the worker MPM, you must
use the <a href="#serverlimit" class="directive"><code class="directive">ServerLimit</code></a> and
<a href="#threadlimit" class="directive"><code class="directive">ThreadLimit</code></a> directives.</p>
<p>Any connection attempts over the
<code class="directive">MaxClients</code> limit will normally be queued,
up to a number based on the <a href="#listenbacklog" class="directive"><code class="directive">ListenBacklog</code></a> directive. Once a child
process is freed at the end of a different request, the connection
will then be serviced.</p>
<p>When the server is compiled with threading, then the maximum
number of simultaneous requests that can be served is obtained
from the value of this directive multiplied by
<a href="#threadsperchild" class="directive"><code class="directive">ThreadsPerChild</code></a>.</p>
<hr/><h2><a name="MaxRequestsPerChild">MaxRequestsPerChild</a> <a name="maxrequestsperchild">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Limit on the number of requests that an individual child server
will handle during its life</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>MaxRequestsPerChild <em>number</em></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>MaxRequestsPerChild 10000</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>MPM</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td><code><a href="worker.html">worker</a></code>, <code><a href="perchild.html">perchild</a></code>, <code><a href="prefork.html">prefork</a></code>, <code><a href="mpm_winnt.html">mpm_winnt</a></code></td></tr></table></td></tr></table>
<p>The <code class="directive">MaxRequestsPerChild</code> directive sets
the limit on the number of requests that an individual child
server process will handle. After
<code class="directive">MaxRequestsPerChild</code> requests, the child
process will die. If <code class="directive">MaxRequestsPerChild</code> is
0, then the process will never expire.</p>
<p>Setting <code class="directive">MaxRequestsPerChild</code> to a
non-zero limit has two beneficial effects:</p>
<ul>
<li>it limits the amount of memory that process can consume
by (accidental) memory leakage;</li>
<li>by giving processes a finite lifetime, it helps reduce
the number of processes when the server load reduces.</li>
</ul>
<p><strong>NOTE:</strong> For <em>KeepAlive</em> requests, only
the first request is counted towards this limit. In effect, it
changes the behavior to limit the number of
<em>connections</em> per child.</p>
<hr/><h2><a name="MaxSpareThreads">MaxSpareThreads</a> <a name="maxsparethreads">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Maximum number of idle threads</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>MaxSpareThreads <em>number</em></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>MaxSpareThreads 10 (Perchild) or 500 (worker)</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>MPM</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td><code><a href="worker.html">worker</a></code>, <code><a href="perchild.html">perchild</a></code></td></tr></table></td></tr></table>
<p>Maximum number of idle threads. Different MPMs deal with this
directive differently. <code><a href="perchild.html">perchild</a></code> monitors the
number of idle threads on a per-child basis. If there are too many
idle threads in that child, the server will begin to kill threads
within that child.</p>
<p><code><a href="worker.html">worker</a></code> deals with idle threads on a
server-wide basis. If there are too many idle threads in the
server then child processes are killed until the number of idle
threads is less than this number.</p>
<p><strong>See also </strong></p><ul><li><a href="#minsparethreads" class="directive"><code class="directive">MinSpareThreads</code></a></li><li><a href="#startservers" class="directive"><code class="directive">StartServers</code></a></li></ul><hr/><h2><a name="MaxThreadsPerChild">MaxThreadsPerChild</a> <a name="maxthreadsperchild">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Maximum number of threads per child process</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>MaxThreadsPerChild <em>number</em></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>MaxThreadsPerChild 64</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>MPM</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td><code><a href="worker.html">worker</a></code>, <code><a href="perchild.html">perchild</a></code></td></tr></table></td></tr></table>
<p>Maximum number of threads per child. For MPMs with a
variable number of threads per child, this directive sets the
maximum number of threads that will be created in each child
process. To increase this value beyond its default, it is
necessary to change the value of the compile-time define
<code>HARD_THREAD_LIMIT</code> and recompile the server.</p>
<hr/><h2><a name="MinSpareThreads">MinSpareThreads</a> <a name="minsparethreads">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Minimum number of idle threads available to handle request
spikes</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>MinSpareServers <em>number</em></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>MinSpareThreads 5 (Perchild) or 250 (worker)</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>MPM</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td><code><a href="worker.html">worker</a></code>, <code><a href="perchild.html">perchild</a></code></td></tr></table></td></tr></table>
<p>Minimum number of idle threads to handle request spikes.
Different MPMs deal with this directive
differently. <code><a href="perchild.html">perchild</a></code> monitors the number of idle
threads on a per-child basis. If there aren't enough idle threads
in that child, the server will begin to create new threads within
that child.</p>
<p><code><a href="worker.html">worker</a></code> deals with idle threads on a
server-wide basis. If there aren't enough idle threads in the
server then child processes are created until the number of idle
threads is greater than number.</p>
<p><strong>See also </strong></p><ul><li><a href="#maxsparethreads" class="directive"><code class="directive">MaxSpareThreads</code></a></li><li><a href="#startservers" class="directive"><code class="directive">StartServers</code></a></li></ul><hr/><h2><a name="NumServers">NumServers</a> <a name="numservers">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Total number of children alive at the same time</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>NumServers <em>number</em></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>NumServers 2</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>MPM</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td><code><a href="perchild.html">perchild</a></code></td></tr></table></td></tr></table>
<p>Number of children alive at the same time. MPMs that use
this directive do not dynamically create new child processes so
this number should be large enough to handle the requests for
the entire site.</p>
<hr/><h2><a name="PidFile">PidFile</a> <a name="pidfile">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Sets the file where the server records the process ID
of the daemon</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>PidFile <em>filename</em></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>PidFile logs/httpd.pid</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>MPM</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td><code><a href="worker.html">worker</a></code>, <code><a href="perchilde.html">perchilde</a></code>, <code><a href="prefork.html">prefork</a></code>, <code><a href="mpm_winnt.html">mpm_winnt</a></code></td></tr></table></td></tr></table>
<p>The <code class="directive">PidFile</code> directive sets the file to
which the server records the process id of the daemon. If the
filename does not begin with a slash (/) then it is assumed to be
relative to the <a href="core.html#serverroot" class="directive"><code class="directive">ServerRoot</code></a>.</p>
<p>It is often useful to be able to send the server a signal,
so that it closes and then reopens its <a href="core.html#errorlog" class="directive"><code class="directive">ErrorLog</code></a> and TransferLog, and
re-reads its configuration files. This is done by sending a
SIGHUP (kill -1) signal to the process id listed in the
PidFile.</p>
<p>The PidFile is subject to the same warnings about log file
placement and <a href="../misc/security_tips.html#serverroot">security</a>.</p>
<hr/><h2><a name="ScoreBoardFile">ScoreBoardFile</a> <a name="scoreboardfile">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Location of the file used to store coordination data for
the child processes</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>ScoreBoardFile <em>file-path</em></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>ScoreBoardFile logs/apache_status</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>MPM</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td><code><a href="worker.html">worker</a></code>, <code><a href="perchild.html">perchild</a></code>, <code><a href="prefork.html">prefork</a></code></td></tr></table></td></tr></table>
<p>Apache uses a scoreboard to communicate between its parent
and child processes. Some architectures require a file to facilitate
this communication. If the file is left unspecified, Apache first
attempts to create the scoreboard entirely in memory (using anonymous
shared memory) and, failing that, will attempt to create the file on
disk (using file-based shared memory). Specifying this directive causes
Apache to always create the file on the disk.</p>
<p>File-based shared memory is useful for third-party applications
that require direct access to the scoreboard.</p>
<p>If you use a <code class="directive">ScoreBoardFile</code> then
you may see improved speed by placing it on a RAM disk. But be
careful that you heed the same warnings about log file placement
and <a href="../misc/security_tips.html">security</a>.</p>
<p><strong>See also </strong></p><ul><li><a href="../stopping.html">Stopping and Restarting Apache</a></li></ul><hr/><h2><a name="SendBufferSize">SendBufferSize</a> <a name="sendbuffersize">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>TCP buffer size</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>SendBufferSize <em>bytes</em></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>MPM</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td><code><a href="worker.html">worker</a></code>, <code><a href="perchild.html">perchild</a></code>, <code><a href="prefork.html">prefork</a></code>, <code><a href="mpm_winnt.html">mpm_winnt</a></code></td></tr></table></td></tr></table>
<p>The server will set the TCP buffer size to the number of bytes
specified. Very useful to increase past standard OS defaults on
high speed high latency (<em>i.e.</em>, 100ms or so, such as
transcontinental fast pipes).</p>
<hr/><h2><a name="ServerLimit">ServerLimit</a> <a name="serverlimit">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Upper limit on configurable number of processes</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>ServerLimit <em>number</em></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>ServerLimit 256 (prefork), ServerLimit 16 (worker)</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>MPM</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td><code><a href="worker.html">worker</a></code>, <code><a href="prefork.html">prefork</a></code></td></tr></table></td></tr></table>
<p>For the <code><a href="prefork.html">prefork</a></code> MPM, this directive sets the
maximum configured value for <a href="#maxclients" class="directive"><code class="directive">MaxClients</code></a> for the lifetime of the
Apache process. For the worker MPM, this directive in combination
with <a href="#threadlimit" class="directive"><code class="directive">ThreadLimit</code></a> sets
the maximum configured value for <a href="#maxclients" class="directive"><code class="directive">MaxClients</code></a> for the lifetime of the
Apache process. Any attempts to change this directive during a
restart will be ignored, but <a href="#maxclients" class="directive"><code class="directive">MaxClients</code></a> can be modified during
a restart.</p>
<p>Special care must be taken when using this directive. If
<code class="directive">ServerLimit</code> is set to a value much higher
than necessary, extra, unused shared memory will be allocated. If
both <code class="directive">ServerLimit</code> and <a href="#maxclients" class="directive"><code class="directive">MaxClients</code></a> are set to values
higher than the system can handle, Apache may not start or the
system may become unstable.</p>
<p>With the <code><a href="prefork.html">prefork</a></code> MPM, use this directive only
if you need to set <a href="#maxclients" class="directive"><code class="directive">MaxClients</code></a> higher higher than 256.
Do not set the value of this directive any higher than what you
might want to set <a href="#maxclients" class="directive"><code class="directive">MaxClients</code></a> to.</p>
<p>With the <code><a href="worker.html">worker</a></code> MPM, use this directive only
if your <a href="#maxclients" class="directive"><code class="directive">MaxClients</code></a> and
<a href="#threadsperchild" class="directive"><code class="directive">ThreadsPerChild</code></a>
settings require more than 16 server processes. Do not set the
value of this directive any higher than the number of server
processes required by what you may want for <a href="#maxclients " class="directive"><code class="directive">MaxClients </code></a> and <a href="#threadsperchild" class="directive"><code class="directive">ThreadsPerChild</code></a>.</p>
<hr/><h2><a name="StartServers">StartServers</a> <a name="startservers">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Number of child server processes created at startup</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>StartServers <em>number</em></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>StartServers 5</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>MPM</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td><code><a href="worker.html">worker</a></code></td></tr></table></td></tr></table>
<p>The <code class="directive">StartServers</code> directive sets the
number of child server processes created on startup. As the number
of processes is dynamically controlled depending on the load,
there is usually little reason to adjust this parameter.</p>
<p><strong>See also </strong></p><ul><li><a href="#minsparethreads" class="directive"><code class="directive">MinSpareThreads</code></a></li><li><a href="#maxsparethreads" class="directive"><code class="directive">MaxSpareThreads</code></a></li></ul><hr/><h2><a name="StartThreads">StartThreads</a> <a name="startthreads">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Nubmer of threads each child creates on startup</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>StartThreads <em>number</em></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>StartThreads 5</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>MPM</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td><code><a href="perchild.html">perchild</a></code></td></tr></table></td></tr></table>
<p>Number of threads each child creates on startup. As the
number of threads is dynamically controlled depending on the
load, there is usually little reason to adjust this
parameter.</p>
<hr/><h2><a name="ThreadLimit">ThreadLimit</a> <a name="threadlimit">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Sets the upper limit on the configurable number of threads
per child process</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>ThreadLimit <em>number</em></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>ThreadLimit 64</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>MPM</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td><code><a href="worker.html">worker</a></code></td></tr></table></td></tr></table>
<p>This directive sets the maximum configured value for <a href="#threadsperchild" class="directive"><code class="directive">ThreadsPerChild</code></a> for the lifetime
of the Apache process. Any attempts to change this directive
during a restart will be ignored, but <a href="#threadsperchild" class="directive"><code class="directive">ThreadsPerChild</code></a> can be modified
during a restart up to the value of this directive.</p>
<p>Special care must be taken when using this directive. If
<code class="directive">ThreadLimit</code> is set to a value much higher
than <a href="#threadsperchild" class="directive"><code class="directive">ThreadsPerChild</code></a>,
extra unused shared memory will be allocated. If both
<code class="directive">ThreadLimit</code> and <a href="#threadsperchild" class="directive"><code class="directive">ThreadsPerChild</code></a> are set to values
higher than the system can handle, Apache may not start or the
system may become unstable.</p>
<p>Use this directive only if you need to set <a href="#threadsperchild" class="directive"><code class="directive">ThreadsPerChild</code></a> higher than 64. Do
not set the value of this directive any higher than what you might
want to set <a href="#threadsperchild" class="directive"><code class="directive">ThreadsPerChild</code></a> to.</p>
<hr/><h2><a name="ThreadsPerChild">ThreadsPerChild</a> <a name="threadsperchild">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Number of threads created by each child process</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>ThreadsPerChild <em>number</em></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>ThreadsPerChild 50</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>MPM</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td><code><a href="worker.html">worker</a></code>, <code><a href="mpm_winnt.html">mpm_winnt</a></code></td></tr></table></td></tr></table>
<p>This directive sets the number of threads created by each
child process. The child creates these threads at startup and
never creates more. if using an MPM like mpmt_winnt, where
there is only one child process, this number should be high
enough to handle the entire load of the server. If using an MPM
like worker, where there are multiple child processes, the
total number of threads should be high enough to handle the
common load on the server.</p>
<hr/><h2><a name="User">User</a> <a name="user">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>The userid under which the server will answer
requests</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>User <em>unix-userid</em></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>User #-1</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config, virtual host</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>MPM</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td><code><a href="worker.html">worker</a></code>, <code><a href="perchild.html">perchild</a></code>, <code><a href="prefork.html">prefork</a></code></td></tr></table></td></tr></table>
<p>The <code class="directive">User</code> directive sets the userid as
which the server will answer requests. In order to use this
directive, the standalone server must be run initially as
root. <em>Unix-userid</em> is one of:</p>
<dl>
<dt>A username</dt>
<dd>Refers to the given user by name.</dd>
<dt># followed by a user number.</dt>
<dd>Refers to a user by their number.</dd>
</dl>
<p>The user should have no privileges which result in it being
able to access files which are not intended to be visible to the
outside world, and similarly, the user should not be able to
execute code which is not meant for httpd requests. It is
recommended that you set up a new user and group specifically for
running the server. Some admins use user <code>nobody</code>, but
this is not always possible or desirable. For example
<code><a href="mod_proxy.html">mod_proxy</a></code>'s cache, when enabled, must be
accessible to this user (see <a href="mod_proxy.html#cacheroot" class="directive"><code class="directive">CacheRoot</code></a>).</p>
<p>Notes: If you start the server as a non-root user, it will
fail to change to the lesser privileged user, and will instead
continue to run as that original user. If you do start the
server as root, then it is normal for the parent process to
remain running as root.</p>
<p>Special note: Use of this directive in <a href="core.html#virtualhost" class="directive"><code class="directive"><VirtualHost></code></a> is no longer supported. To
configure your server for <a href="mod_suexec.html">suexec</a> use
<a href="mod_suexec.html#suexecusergroup" class="directive"><code class="directive">SuexecUserGroup</code></a>.</p>
<blockquote><table><tr><td bgcolor="#e0e5f5"><p align="center"><strong>Security</strong></p> <p>Don't set <code class="directive">User</code>
(or <a href="#group" class="directive"><code class="directive">Group</code></a>) to
<code>root</code> unless you know exactly what you are doing, and what
the dangers are.</p></td></tr></table></blockquote>
<hr/></blockquote><h3 align="center">Apache HTTP Server Version 2.0</h3><a href="./"><img src="../images/index.gif" alt="Index"/></a><a href="../"><img src="../images/home.gif" alt="Home"/></a></body></html>
1.1 httpd-2.0/docs/manual/mod/mpm_netware.html.en
Index: mpm_netware.html.en
===================================================================
<html xmlns="http://www.w3.org/TR/xhtml1/strict"><head><!--
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
This file is generated from xml source: DO NOT EDIT
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
--><title>mpm_netware- Apache HTTP Server</title><link href="../style/manual.css" type="text/css" rel="stylesheet"/></head><body><blockquote><div align="center"><img src="../images/sub.gif" alt="[APACHE DOCUMENTATION]"/><h3>Apache HTTP Server Version 2.0</h3></div><h1 align="center">Apache Module mpm_netware</h1><table cellspacing="1" cellpadding="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td valign="top"><span class="help">Description:</span></td><td>Multi-Processing Module implementing an exclusively threaded web
server optimized for Novell NetWare</td></tr><tr><td><a href="module-dict.html#Status" class="help">Status:</a></td><td>MPM</td></tr><tr><td><a href="module-dict.html#ModuleIdentifier" class="help">Module Identifier:</a></td><td>mpm_netware_module</td></tr></table></td></tr></table><h2>Summary</h2>
<p>This Multi-Processing Module (MPM) implements an exclusively threaded web server
that has been optimized for Novell NetWare.</p>
<p>The main thread is responsible for launching child
worker threads which listen for connections and serve them when they
arrive. Apache always tries to maintain several <em>spare</em>
or idle worker threads, which stand ready to serve incoming
requests. In this way, clients do not need to wait for a new
child threads to be spawned before their requests can be
served.</p>
<p>The <code>StartThreads</code>, <code>MinSpareThreads</code>,
<code>MaxSpareThreads</code>, and <code>MaxThreads</code>
regulate how the main thread creates worker threads to serve
requests. In general, Apache is very self-regulating, so most
sites do not need to adjust these directives from their default
values. Sites which need to serve more than 250 simultaneous
requests may need to increase <code>MaxThreads</code>, while
sites with limited memory may need to decrease
<code>MaxThreads</code> to keep the server from thrashing (spawning and
terminating idle threads). More information about
tuning process creation is provided in the <a href="../misc/perf-tuning.html">performance hints</a>
documentation.</p>
<p><code>MaxRequestsPerChild</code> controls how frequently the
server recycles processes by killing old ones and launching new
ones. On the NetWare OS it is highly recommended that this directive
remain set to 0. This allows worker threads to continue servicing
requests indefinitely.</p>
<p>See also: <a href="../bind.html">Setting which addresses and
ports Apache uses</a>.</p>
<h2>Directives</h2><ul><li><a href="mpm_common.html#listen">Listen</a></li><li><a href="mpm_common.html#listenbacklog">ListenBacklog</a></li><li><a href="mpm_common.html#maxrequestsperchild">MaxRequestsPerChild</a></li><li><a href="#maxsparethreads">MaxSpareThreads</a></li><li><a href="#maxthreads">MaxThreads</a></li><li><a href="#minsparethreads">MinSpareThreads</a></li><li><a href="mpm_common.html#sendbuffersize">SendBufferSize</a></li><li><a href="#startthreads">StartThreads</a></li><li><a href="#threadstacksize">ThreadStackSize</a></li></ul><hr/><h2><a name="MaxSpareThreads">MaxSpareThreads</a> <a name="maxsparethreads">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td/></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>MaxSpareThreads <em>number</em></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>MaxSpareThreads 100</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>MPM</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mpm_netware</td></tr></table></td></tr></table>
<p>The <code class="directive">MaxSpareThreads</code> directive sets the
desired maximum number of <em>idle</em> worker threads. An idle
worker thread is one which is not handling a request. If there are
more than MaxSpareThreads idle, then the main thread will kill off
the excess worker threads.</p>
<p>Tuning of this parameter should only be necessary on very
busy sites. Setting this parameter to a large number is almost
always a bad idea.</p>
<hr/><h2><a name="MaxThreads">MaxThreads</a> <a name="maxthreads">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td/></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>MaxThreads <em>number</em></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>MaxThreads 250</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>MPM</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mpm_netware</td></tr></table></td></tr></table>
<p>The MaxThreads directive sets the desired maximum
number worker threads allowable.</p>
<hr/><h2><a name="MinSpareThreads">MinSpareThreads</a> <a name="minsparethreads">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td/></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>MinSpareThreads <em>number</em></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>MinSpareThreads 10</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>MPM</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mpm_netware</td></tr></table></td></tr></table>
<p>The <code class="directive">MinSpareThreads</code> directive sets the
desired minimum number of <em>idle</em> worker threads. An idle worker
thread is one which is not handling a request. If there are fewer than
MinSpareThreads idle, then the main thread spawns new worker.</p>
<p>Tuning of this parameter should only be necessary on very
busy sites. Setting this parameter to a large number is almost
always a bad idea.</p>
<hr/><h2><a name="StartThreads">StartThreads</a> <a name="startthreads">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td/></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>StartThreads <em>number</em></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>StartThreads 50</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>MPM</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mpm_netware</td></tr></table></td></tr></table>
<p>The StartThreads directive sets the desired
number of worker threads to spawn and startup</p>
<hr/><h2><a name="ThreadStackSize">ThreadStackSize</a> <a name="threadstacksize">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td/></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>ThreadStackSize <em>number</em></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>ThreadStackSize 65536</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>MPM</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>mpm_netware</td></tr></table></td></tr></table>
<p>This directive tells the server what stack size to use for
each of the running threads. If you ever get a stack overflow
you will need to bump this number to a higher setting.</p>
<hr/></blockquote><h3 align="center">Apache HTTP Server Version 2.0</h3><a href="./"><img src="../images/index.gif" alt="Index"/></a><a href="../"><img src="../images/home.gif" alt="Home"/></a></body></html>
1.1 httpd-2.0/docs/manual/mod/mpm_winnt.html.en
Index: mpm_winnt.html.en
===================================================================
<html xmlns="http://www.w3.org/TR/xhtml1/strict"><head><!--
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
This file is generated from xml source: DO NOT EDIT
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
--><title>mpm_winnt- Apache HTTP Server</title><link href="../style/manual.css" type="text/css" rel="stylesheet"/></head><body><blockquote><div align="center"><img src="../images/sub.gif" alt="[APACHE DOCUMENTATION]"/><h3>Apache HTTP Server Version 2.0</h3></div><h1 align="center">Apache Module mpm_winnt</h1><table cellspacing="1" cellpadding="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td valign="top"><span class="help">Description:</span></td><td>This Multi-Processing Module is optimized for Windows
NT.</td></tr><tr><td><a href="module-dict.html#Status" class="help">Status:</a></td><td>MPM</td></tr><tr><td><a href="module-dict.html#ModuleIdentifier" class="help">Module Identifier:</a></td><td>mpm_winnt_module</td></tr></table></td></tr></table><h2>Summary</h2>
<p>This Multi-Processing Module (MPM) is the default for the
Windows NT operating systems. It uses a single control process
which launches a single child process which in turn creates
threads to handle requests</p>
<h2>Directives</h2><ul><li><a href="mpm_common.html#coredumpdirectory">CoreDumpDirectory</a></li><li><a href="mpm_common.html#listen">Listen</a></li><li><a href="mpm_common.html#listenbacklog">ListenBacklog</a></li><li><a href="mpm_common.html#maxrequestsperchild">MaxRequestsPerChild</a></li><li><a href="mpm_common.html#pidfile">PidFile</a></li><li><a href="mpm_common.html#sendbuffersize">SendBufferSize</a></li><li><a href="mpm_common.html#threadsperchild">ThreadsPerChild</a></li></ul><hr/></blockquote><h3 align="center">Apache HTTP Server Version 2.0</h3><a href="./"><img src="../images/index.gif" alt="Index"/></a><a href="../"><img src="../images/home.gif" alt="Home"/></a></body></html>
1.1 httpd-2.0/docs/manual/mod/perchild.html.en
Index: perchild.html.en
===================================================================
<html xmlns="http://www.w3.org/TR/xhtml1/strict"><head><!--
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
This file is generated from xml source: DO NOT EDIT
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
--><title>perchild- Apache HTTP Server</title><link href="../style/manual.css" type="text/css" rel="stylesheet"/></head><body><blockquote><div align="center"><img src="../images/sub.gif" alt="[APACHE DOCUMENTATION]"/><h3>Apache HTTP Server Version 2.0</h3></div><h1 align="center">Apache Module perchild</h1><table cellspacing="1" cellpadding="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td valign="top"><span class="help">Description:</span></td><td>Multi-Processing Module allowing for daemon processes
serving requests to be assigned a variety of different
userids</td></tr><tr><td><a href="module-dict.html#Status" class="help">Status:</a></td><td>MPM</td></tr><tr><td><a href="module-dict.html#ModuleIdentifier" class="help">Module Identifier:</a></td><td>mpm_perchild_module</td></tr></table></td></tr></table><h2>Summary</h2>
<blockquote><table><tr><td bgcolor="#ffe5f5">
This MPM does not currently work on most platforms. Work is ongoing to
make it functional.
</td></tr></table></blockquote>
<p>This Multi-Processing Module (MPM) implements a hybrid
multi-process, multi-threaded web server. A fixed number of
processes create threads to handle requests. Fluctuations in
load are handled by increasing or decreasing the number of
threads in each process.</p>
<p>A single control process launches the number of child processes
indicated by the <a href="mpm_common.html#numservers" class="directive"><code class="directive">NumServers</code></a> directive at server
startup. Each child process creates threads as specified in the
<code>StartThreads</code> directive. The individual threads then
listen for connections and serve them when they arrive.</p>
<p>Apache always tries to maintain a pool of <em>spare</em> or
idle server threads, which stand ready to serve incoming
requests. In this way, clients do not need to wait for new
threads to be created. For each child process, Apache assesses
the number of idle threads and creates or destroys threads to
keep this number within the boundaries specified by
<code>MinSpareThreads</code> and <code>MaxSpareThreads</code>.
Since this process is very self-regulating, it is rarely
necessary to modify these directives from their default values.
The maximum number of clients that may be served simultaneously
is determined by multiplying the number of server processes
that will be created (<code>NumServers</code>) by the maximum
number of threads created in each process
(<code>MaxThreadsPerChild</code>).</p>
<p>While the parent process is usually started as root under
Unix in order to bind to port 80, the child processes and
threads are launched by Apache as a less-privileged user. The
<code>User</code> and <code>Group</code> directives are used to
set the privileges of the Apache child processes. The child
processes must be able to read all the content that will be
served, but should have as few privileges beyond that as
possible. In addition, unless <a href="../suexec.html">suexec</a> is used, these directives also
set the privileges which will be inherited by CGI scripts.</p>
<p><code>MaxRequestsPerChild</code> controls how frequently the
server recycles processes by killing old ones and launching new
ones.</p>
<p>See also: <a href="../bind.html">Setting which addresses and
ports Apache uses</a>.</p>
<p>In addition it adds the extra ability to specify that
specific processes should serve requests under different
userids. These processes can then be associated with specific
virtual hosts.</p>
<h2>Directives</h2><ul><li><a href="#assignuserid">AssignUserId</a></li><li><a href="#childperuserid">ChildPerUserId</a></li><li><a href="mpm_common.html#coredumpdirectory">CoreDumpDirectory</a></li><li><a href="mpm_common.html#group">Group</a></li><li><a href="mpm_common.html#listen">Listen</a></li><li><a href="mpm_common.html#listenbacklog">ListenBacklog</a></li><li><a href="mpm_common.html#lockfile">LockFile</a></li><li><a href="mpm_common.html#maxrequestsperchild">MaxRequestsPerChild</a></li><li><a href="mpm_common.html#maxsparethreads">MaxSpareThreads</a></li><li><a href="mpm_common.html#maxthreadsperchild">MaxThreadsPerChild</a></li><li><a href="mpm_common.html#minsparethreads">MinSpareThreads</a></li><li><a href="mpm_common.html#numservers">NumServers</a></li><li><a href="mpm_common.html#pidfile">PidFile</a></li><li><a href="mpm_common.html#scoreboardfile">ScoreBoardFile</a></li><li><a href="mpm_common.html#sendbuffersize">SendBufferSize</a></li><li><a href="mpm_common.html#startthreads">StartThreads</a></li><li><a href="mpm_common.html#user">User</a></li></ul><hr/><h2><a name="AssignUserId">AssignUserId</a> <a name="assignuserid">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td/></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>AssignUserID <em>user_id</em> <em>group_id</em></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>virtual host</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>MPM</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>perchild</td></tr></table></td></tr></table>
<p>Tie a virtual host to a specific child process. Requests addressed to
the virtual host where this directive appears will be served by the process
running with the specified user and group id.</p>
<hr/><h2><a name="ChildPerUserId">ChildPerUserId</a> <a name="childperuserid">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td/></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>ChildPerUserID <em>user_id</em>
<em>group_id</em> <em>child_id</em></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>MPM</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>perchild</td></tr></table></td></tr></table>
<p>Specify a user id and group id for a specific child process. The number of
children if set by the <a href="mpm_common.html#numservers">NumServers</a>
directive. For example, the default value for <a href="mpm_common.html#numservers">NumServers</a> is 5 and that means
children ids 1,2,3,4 and 5 are available for assigment. If a child does not
have an associated ChildPerUserID, it inherits the <a href="mpm_common.html#user">User</a> and <a href="mpm_common.html#group">Group</a> settings from the main server </p>
<hr/></blockquote><h3 align="center">Apache HTTP Server Version 2.0</h3><a href="./"><img src="../images/index.gif" alt="Index"/></a><a href="../"><img src="../images/home.gif" alt="Home"/></a></body></html>
1.1 httpd-2.0/docs/manual/mod/prefork.html.en
Index: prefork.html.en
===================================================================
<html xmlns="http://www.w3.org/TR/xhtml1/strict"><head><!--
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
This file is generated from xml source: DO NOT EDIT
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
--><title>prefork- Apache HTTP Server</title><link href="../style/manual.css" type="text/css" rel="stylesheet"/></head><body><blockquote><div align="center"><img src="../images/sub.gif" alt="[APACHE DOCUMENTATION]"/><h3>Apache HTTP Server Version 2.0</h3></div><h1 align="center">Apache Module prefork</h1><table cellspacing="1" cellpadding="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td valign="top"><span class="help">Description:</span></td><td>Implements a non-threaded, pre-forking web server</td></tr><tr><td><a href="module-dict.html#Status" class="help">Status:</a></td><td>MPM</td></tr><tr><td><a href="module-dict.html#ModuleIdentifier" class="help">Module Identifier:</a></td><td>mpm_prefork_module</td></tr></table></td></tr></table><h2>Summary</h2>
<p>This Multi-Processing Module (MPM) implements a
non-threaded, pre-forking web server which handles request in a
manner very similar to the default behavior of Apache 1.3 on
Unix.</p>
<p>A single control process is responsible for launching child
processes which listen for connections and serve them when they
arrive. Apache always tries to maintain several <em>spare</em>
or idle server processes, which stand ready to serve incoming
requests. In this way, clients do not need to wait for a new
child processes to be forked before their requests can be
served.</p>
<p>The <a href="mpm_common.html#startservers" class="directive"><code class="directive">StartServers</code></a>,
<a href="#minspareservers" class="directive"><code class="directive">MinSpareServers</code></a>,
<a href="#maxspareservers" class="directive"><code class="directive">MaxSpareServers</code></a>, and
<a href="mpm_common.html#maxclients" class="directive"><code class="directive">MaxClients</code></a> regulate how
the parent process creates children to serve requests. In general,
Apache is very self-regulating, so most sites do not need to
adjust these directives from their default values. Sites which
need to serve more than 256 simultaneous requests may need to
increase <a href="mpm_common.html#maxclients" class="directive"><code class="directive">MaxClients</code></a>,
while sites with limited memory may need to decrease <a href="mpm_common.html#maxclients" class="directive"><code class="directive">MaxClients</code></a> to keep the server from
thrashing (swapping memory to disk and back). More information
about tuning process creation is provided in the <a href="../misc/perf-tuning.html">performance hints</a>
documentation.</p>
<p>While the parent process is usually started as root under Unix
in order to bind to port 80, the child processes are launched by
Apache as a less-privileged user. The <a href="mpm_common.html#user" class="directive"><code class="directive">User</code></a> and <a href="mpm_common.html#group" class="directive"><code class="directive">Group</code></a> directives are used to set
the privileges of the Apache child processes. The child processes
must be able to read all the content that will be served, but
should have as few privileges beyond that as possible. In
addition, unless <a href="../suexec.html">suexec</a> is used,
these directives also set the privileges which will be inherited
by CGI scripts.</p>
<p><a href="mpm_common.html#maxrequestsperchild" class="directive"><code class="directive">MaxRequestsPerChild</code></a>
controls how frequently the server recycles processes by killing
old ones and launching new ones.</p>
<h2>Directives</h2><ul><li><a href="#acceptmutex">AcceptMutex</a></li><li><a href="mpm_common.html#coredumpdirectory">CoreDumpDirectory</a></li><li><a href="mpm_common.html#listen">Listen</a></li><li><a href="mpm_common.html#listenbacklog">ListenBacklog</a></li><li><a href="mpm_common.html#lockfile">LockFile</a></li><li><a href="mpm_common.html#maxrequestsperchild">MaxRequestsPerChild</a></li><li><a href="mpm_common.html#maxspareservers">MaxSpareServers</a></li><li><a href="#maxspareservers">MaxSpareServers</a></li><li><a href="mpm_common.html#minspareservers">MinSpareServers</a></li><li><a href="#minspareservers">MinSpareServers</a></li><li><a href="mpm_common.html#pidfile">PidFile</a></li><li><a href="mpm_common.html#scoreboardfile">ScoreBoardFile</a></li><li><a href="mpm_common.html#sendbuffersize">SendBufferSize</a></li><li><a href="mpm_common.html#serverlimit">ServerLimit</a></li><li><a href="mpm_common.html#startservers">StartServers</a></li><li><a href="mpm_common.html#user">User</a></li></ul><p><strong>See also </strong></p><ul><li><a href="../bind.html">Setting which addresses and
ports Apache uses</a></li></ul><hr/><h2><a name="AcceptMutex">AcceptMutex</a> <a name="acceptmutex">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Method that Apache uses to serialize multiple children
accepting requests on network sockets</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>AcceptMutex default|<em>method</em></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>AcceptMutex default</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>MPM</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>prefork</td></tr></table></td></tr></table>
<p>The <code class="directive">AcceptMutex</code> directives sets the
method that Apache uses to serialize multiple children accepting
requests on network sockets. Prior to Apache 2.0, the method was
selectable only at compile time. The optimal method to use is
highly architecture and platform dependent. For further details,
see the <a href="../misc/perf-tuning.html">performance tuning</a>
documentation.</p>
<p>If this directive is set to <code>default</code>, then the
compile-time selected default will be used. Other possible
methods are listed below. Note that not all methods are
available on all platforms. If a method is specified which is
not available, a message will be written to the error log
listing the available methods.</p>
<dl>
<dt><code>flock</code></dt>
<dd>uses the <code>flock(2)</code> system call to lock the
file defined by the <a href="mpm_common.html#lockfile" class="directive"><code class="directive">LockFile</code></a> directive.</dd>
<dt><code>fcntl</code></dt>
<dd>uses the <code>fnctl(2)</code> system call to lock the
file defined by the <a href="mpm_common.html#lockfile" class="directive"><code class="directive">LockFile</code></a> directive.</dd>
<dt><code>sysvsem</code></dt>
<dd>uses SySV-style semaphores to implement the mutex.</dd>
<dt><code>pthread</code></dt>
<dd>uses POSIX mutexes as implemented by the POSIX Threads
(PThreads) specification.</dd>
</dl>
<hr/><h2><a name="MaxSpareServers">MaxSpareServers</a> <a name="maxspareservers">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Maximum number of idle child server processes</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>MaxSpareServers <em>number</em><br></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>MaxSpareServers 10</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>MPM</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>prefork</td></tr></table></td></tr></table>
<p>The <code class="directive">MaxSpareServers</code> directive sets the
desired maximum number of <em>idle</em> child server processes. An
idle process is one which is not handling a request. If there are
more than MaxSpareServers idle, then the parent process will kill
off the excess processes.</p>
<p>Tuning of this parameter should only be necessary on very
busy sites. Setting this parameter to a large number is almost
always a bad idea.</p>
<p><strong>See also </strong></p><ul><li><a href="#minspareservers" class="directive"><code class="directive">MinSpareServers</code></a></li><li><a href="mpm_common.html#startservers" class="directive"><code class="directive">StartServers</code></a></li></ul><hr/><h2><a name="MinSpareServers">MinSpareServers</a> <a name="minspareservers">Directive</a></h2><table cellpadding="1" cellspacing="0" border="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td><strong>Description: </strong></td><td>Minimum number of idle child server processes</td></tr><tr><td><a href="directive-dict.html#Syntax" class="help">Syntax:</a></td><td>MinSpareServers <em>number</em></td></tr><tr><td><a href="directive-dict.html#Default" class="help">Default:</a></td><td><code>MinSpareServers 5</code></td></tr><tr><td><a href="directive-dict.html#Context" class="help">Context:</a></td><td>server config</td></tr><tr><td><a href="directive-dict.html#Status" class="help">Status:</a></td><td>MPM</td></tr><tr><td><a href="directive-dict.html#Module" class="help">Module:</a></td><td>prefork</td></tr></table></td></tr></table>
<p>The <code class="directive">MinSpareServers</code> directive sets the
desired minimum number of <em>idle</em> child server processes. An
idle process is one which is not handling a request. If there are
fewer than MinSpareServers idle, then the parent process creates
new children at a maximum rate of 1 per second.</p>
<p>Tuning of this parameter should only be necessary on very
busy sites. Setting this parameter to a large number is almost
always a bad idea.</p>
<p>This directive has no effect on Microsoft Windows.</p>
<p><strong>See also </strong></p><ul><li><a href="#maxspareservers" class="directive"><code class="directive">MaxSpareServers</code></a></li><li><a href="mpm_common.html#startservers" class="directive"><code class="directive">StartServers</code></a></li></ul><hr/></blockquote><h3 align="center">Apache HTTP Server Version 2.0</h3><a href="./"><img src="../images/index.gif" alt="Index"/></a><a href="../"><img src="../images/home.gif" alt="Home"/></a></body></html>
1.1 httpd-2.0/docs/manual/mod/worker.html.en
Index: worker.html.en
===================================================================
<html xmlns="http://www.w3.org/TR/xhtml1/strict"><head><!--
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
This file is generated from xml source: DO NOT EDIT
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
--><title>worker- Apache HTTP Server</title><link href="../style/manual.css" type="text/css" rel="stylesheet"/></head><body><blockquote><div align="center"><img src="../images/sub.gif" alt="[APACHE DOCUMENTATION]"/><h3>Apache HTTP Server Version 2.0</h3></div><h1 align="center">Apache Module worker</h1><table cellspacing="1" cellpadding="0" bgcolor="#cccccc"><tr><td><table bgcolor="#ffffff"><tr><td valign="top"><span class="help">Description:</span></td><td>Multi-Processing Module implementing a hybrid
multi-threaded multi-process web server</td></tr><tr><td><a href="module-dict.html#Status" class="help">Status:</a></td><td>MPM</td></tr><tr><td><a href="module-dict.html#ModuleIdentifier" class="help">Module Identifier:</a></td><td>mpm_worker_module</td></tr></table></td></tr></table><h2>Summary</h2>
<p>This Multi-Processing Module (MPM) implements a hybrid
multi-process multi-threaded server. Each process has a fixed
number of threads. The server adjusts to handle load by
increasing or decreasing the number of processes.</p>
<p>A single control process is responsible for launching child
processes. Each child process creates a fixed number of threads
as specified in the <code>ThreadsPerChild</code> directive. The
individual threads then listen for connections and serve them
when they arrive.</p>
<p>Apache always tries to maintain a pool of <em>spare</em> or
idle server threads, which stand ready to serve incoming
requests. In this way, clients do not need to wait for a new
threads or processes to be created before their requests can be
served. Apache assesses the total number of idle threads in all
processes, and forks or kills processes to keep this number
within the boundaries specified by <code>MinSpareThreads</code>
and <code>MaxSpareThreads</code>. Since this process is very
self-regulating, it is rarely necessary to modify these
directives from their default values. The maximum number of
clients that may be served simultaneously is determined by
multiplying the maximum number of server processes that will be
created (<code>MaxClients</code>) by the number of threads
created in each process (<code>ThreadsPerChild</code>).</p>
<p>While the parent process is usually started as root under
Unix in order to bind to port 80, the child processes and
threads are launched by Apache as a less-privileged user. The
<code>User</code> and <code>Group</code> directives are used to
set the privileges of the Apache child processes. The child
processes must be able to read all the content that will be
served, but should have as few privileges beyond that as
possible. In addition, unless <a href="../suexec.html">suexec</a> is used, these directives also
set the privileges which will be inherited by CGI scripts.</p>
<p><code>MaxRequestsPerChild</code> controls how frequently the
server recycles processes by killing old ones and launching new
ones.</p>
<p>See also: <a href="../bind.html">Setting which addresses and
ports Apache uses</a>.</p>
<h2>Directives</h2><ul><li><a href="mpm_common.html#coredumpdirectory">CoreDumpDirectory</a></li><li><a href="mpm_common.html#group">Group</a></li><li><a href="mpm_common.html#listen">Listen</a></li><li><a href="mpm_common.html#listenbacklog">ListenBacklog</a></li><li><a href="mpm_common.html#lockfile">LockFile</a></li><li><a href="mpm_common.html#maxclients">MaxClients</a></li><li><a href="mpm_common.html#maxrequestsperchild">MaxRequestsPerChild</a></li><li><a href="mpm_common.html#maxsparethreads">MaxSpareThreads</a></li><li><a href="mpm_common.html#minsparethreads">MinSpareThreads</a></li><li><a href="mpm_common.html#pidfile">PidFile</a></li><li><a href="mpm_common.html#scoreboardfile">ScoreBoardFile</a></li><li><a href="mpm_common.html#sendbuffersize">SendBufferSize</a></li><li><a href="mpm_common.html#serverlimit">ServerLimit</a></li><li><a href="mpm_common.html#startservers">StartServers</a></li><li><a href="mpm_common.html#threadlimit">ThreadLimit</a></li><li><a href="mpm_common.html#threadsperchild">ThreadsPerChild</a></li><li><a href="mpm_common.html#user">User</a></li></ul><hr/></blockquote><h3 align="center">Apache HTTP Server Version 2.0</h3><a href="./"><img src="../images/index.gif" alt="Index"/></a><a href="../"><img src="../images/home.gif" alt="Home"/></a></body></html>