1<?xml version="1.0" encoding="ISO-8859-1"?>
2<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
3<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
4        XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
5              This file is generated from xml source: DO NOT EDIT
6        XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
7      -->
8<title>mod_auth_form - Apache HTTP Server</title>
9<link href="/style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
10<link href="/style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
11<link href="/style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" /><link rel="stylesheet" type="text/css" href="/style/css/prettify.css" />
12<script src="/style/scripts/prettify.min.js" type="text/javascript">
13</script>
14
15<link href="/images/favicon.ico" rel="shortcut icon" /></head>
16<body>
17<div id="page-header">
18<p class="menu"><a href="/mod/">Modules</a> | <a href="/mod/directives.html">Directives</a> | <a href="http://wiki.apache.org/httpd/FAQ">FAQ</a> | <a href="/glossary.html">Glossary</a> | <a href="/sitemap.html">Sitemap</a></p>
19<p class="apache">Apache HTTP Server Version 2.4</p>
20<img alt="" src="/images/feather.gif" /></div>
21<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="/images/left.gif" /></a></div>
22<div id="path">
23<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs/">Documentation</a> &gt; <a href="../">Version 2.4</a> &gt; <a href="./">Modules</a></div>
24<div id="page-content">
25<div id="preamble"><h1>Apache Module mod_auth_form</h1>
26<div class="toplang">
27<p><span>Available Languages: </span><a href="/en/mod/mod_auth_form.html" title="English">&nbsp;en&nbsp;</a> |
28<a href="/fr/mod/mod_auth_form.html" hreflang="fr" rel="alternate" title="Fran�ais">&nbsp;fr&nbsp;</a></p>
29</div>
30<table class="module"><tr><th><a href="module-dict.html#Description">Description:</a></th><td>Form authentication</td></tr>
31<tr><th><a href="module-dict.html#Status">Status:</a></th><td>Base</td></tr>
32<tr><th><a href="module-dict.html#ModuleIdentifier">Module�Identifier:</a></th><td>auth_form_module</td></tr>
33<tr><th><a href="module-dict.html#SourceFile">Source�File:</a></th><td>mod_auth_form.c</td></tr>
34<tr><th><a href="module-dict.html#Compatibility">Compatibility:</a></th><td>Available in Apache 2.3 and later</td></tr></table>
35<h3>Summary</h3>
36
37    <div class="warning"><h3>Warning</h3>
38      <p>Form authentication depends on the <code class="module"><a href="/mod/mod_session.html">mod_session</a></code>
39      modules, and these modules make use of HTTP cookies, and as such can fall
40      victim to Cross Site Scripting attacks, or expose potentially private
41      information to clients. Please ensure that the relevant risks have
42      been taken into account before enabling the session functionality on
43      your server.</p>
44    </div>
45
46    <p>This module allows the use of an HTML login form to restrict access
47    by looking up users in the given providers. HTML forms require
48    significantly more configuration than the alternatives, however an
49    HTML login form can provide a much friendlier experience for end users.
50    </p>
51
52    <p>HTTP basic authentication is provided by
53    <code class="module"><a href="/mod/mod_auth_basic.html">mod_auth_basic</a></code>, and HTTP digest authentication is
54    provided by <code class="module"><a href="/mod/mod_auth_digest.html">mod_auth_digest</a></code>.  This module should
55    be combined with at least one authentication module
56    such as <code class="module"><a href="/mod/mod_authn_file.html">mod_authn_file</a></code> and one authorization
57    module such as <code class="module"><a href="/mod/mod_authz_user.html">mod_authz_user</a></code>.</p>
58
59    <p>Once the user has been successfully authenticated, the user's login
60    details will be stored in a session provided by <code class="module"><a href="/mod/mod_session.html">mod_session</a></code>.
61    </p>
62
63</div>
64<div id="quickview"><h3 class="directives">Directives</h3>
65<ul id="toc">
66<li><img alt="" src="/images/down.gif" /> <a href="#authformauthoritative">AuthFormAuthoritative</a></li>
67<li><img alt="" src="/images/down.gif" /> <a href="#authformbody">AuthFormBody</a></li>
68<li><img alt="" src="/images/down.gif" /> <a href="#authformdisablenostore">AuthFormDisableNoStore</a></li>
69<li><img alt="" src="/images/down.gif" /> <a href="#authformfakebasicauth">AuthFormFakeBasicAuth</a></li>
70<li><img alt="" src="/images/down.gif" /> <a href="#authformlocation">AuthFormLocation</a></li>
71<li><img alt="" src="/images/down.gif" /> <a href="#authformloginrequiredlocation">AuthFormLoginRequiredLocation</a></li>
72<li><img alt="" src="/images/down.gif" /> <a href="#authformloginsuccesslocation">AuthFormLoginSuccessLocation</a></li>
73<li><img alt="" src="/images/down.gif" /> <a href="#authformlogoutlocation">AuthFormLogoutLocation</a></li>
74<li><img alt="" src="/images/down.gif" /> <a href="#authformmethod">AuthFormMethod</a></li>
75<li><img alt="" src="/images/down.gif" /> <a href="#authformmimetype">AuthFormMimetype</a></li>
76<li><img alt="" src="/images/down.gif" /> <a href="#authformpassword">AuthFormPassword</a></li>
77<li><img alt="" src="/images/down.gif" /> <a href="#authformprovider">AuthFormProvider</a></li>
78<li><img alt="" src="/images/down.gif" /> <a href="#authformsitepassphrase">AuthFormSitePassphrase</a></li>
79<li><img alt="" src="/images/down.gif" /> <a href="#authformsize">AuthFormSize</a></li>
80<li><img alt="" src="/images/down.gif" /> <a href="#authformusername">AuthFormUsername</a></li>
81</ul>
82<h3>Topics</h3>
83<ul id="topics">
84<li><img alt="" src="/images/down.gif" /> <a href="#basicconfig">Basic Configuration</a></li>
85<li><img alt="" src="/images/down.gif" /> <a href="#standalone">Standalone Login</a></li>
86<li><img alt="" src="/images/down.gif" /> <a href="#inline">Inline Login</a></li>
87<li><img alt="" src="/images/down.gif" /> <a href="#inlinepreservebody">Inline Login with Body Preservation</a></li>
88<li><img alt="" src="/images/down.gif" /> <a href="#loggingout">Logging Out</a></li>
89<li><img alt="" src="/images/down.gif" /> <a href="#urlencoding">Usernames and Passwords</a></li>
90</ul><h3>See also</h3>
91<ul class="seealso">
92<li><code class="module"><a href="/mod/mod_session.html">mod_session</a></code></li>
93<li><code class="directive"><a href="/mod/mod_authn_core.html#authname">AuthName</a></code></li>
94<li><code class="directive"><a href="/mod/mod_authn_core.html#authtype">AuthType</a></code></li>
95<li><code class="directive"><a href="/mod/mod_authz_core.html#require">Require</a></code></li>
96<li><a href="/howto/auth.html">Authentication howto</a></li>
97</ul><ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div>
98<div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
99<div class="section">
100<h2><a name="basicconfig" id="basicconfig">Basic Configuration</a></h2>
101
102      <p>To protect a particular URL with <code class="module"><a href="/mod/mod_auth_form.html">mod_auth_form</a></code>, you need to
103      decide where you will store your <var>session</var>, and you will need to
104      decide what method you will use to authenticate. In this simple example, the
105      login details will be stored in a session based on
106      <code class="module"><a href="/mod/mod_session_cookie.html">mod_session_cookie</a></code>, and authentication will be attempted against
107      a file using <code class="module"><a href="/mod/mod_authn_file.html">mod_authn_file</a></code>. If authentication is unsuccessful,
108      the user will be redirected to the form login page.</p>
109
110      <div class="example"><h3>Basic example</h3><pre class="prettyprint lang-config">AuthFormProvider file
111AuthUserFile conf/passwd
112AuthType form
113AuthName realm
114AuthFormLoginRequiredLocation http://example.com/login.html
115Session On
116SessionCookieName session path=/
117SessionCryptoPassphrase secret</pre>
118</div>
119
120      <p>The directive <code class="directive"><a href="/mod/mod_authn_core.html#authtype">AuthType</a></code> will enable
121      the <code class="module"><a href="/mod/mod_auth_form.html">mod_auth_form</a></code> authentication when set to the value <var>form</var>.
122      The directives <code class="directive"><a href="#authformprovider">AuthFormProvider</a></code> and
123      <code class="directive"><a href="/mod/mod_authn_file.html#authuserfile">AuthUserFile</a></code> specify that usernames
124      and passwords should be checked against the chosen file.</p>
125
126      <p>The directives <code class="directive"><a href="/mod/mod_session.html#session">Session</a></code>,
127      <code class="directive"><a href="/mod/mod_session_cookie.html#sessioncookiename">SessionCookieName</a></code> and
128      <code class="directive"><a href="/mod/mod_session_crypto.html#sessioncryptopassphrase">SessionCryptoPassphrase</a></code> create an
129      encrypted session stored within an HTTP cookie on the browser. For more information
130      on the different options for configuring a session, read the documentation for
131      <code class="module"><a href="/mod/mod_session.html">mod_session</a></code>.</p>
132
133      <p>In the simple example above, a URL has been protected by
134      <code class="module"><a href="/mod/mod_auth_form.html">mod_auth_form</a></code>, but the user has yet to be given an opportunity to
135      enter their username and password. Options for doing so include providing a
136      dedicated standalone login page for this purpose, or for providing the login
137      page inline.</p>
138    </div><div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
139<div class="section">
140<h2><a name="standalone" id="standalone">Standalone Login</a></h2>
141
142      <p>The login form can be hosted as a standalone page, or can be provided inline on
143      the same page.</p>
144
145      <p>When configuring the login as a standalone page, unsuccessful authentication
146      attempts should be redirected to a login form created by the website for this purpose,
147      using the <code class="directive"><a href="#authformloginrequiredlocation">AuthFormLoginRequiredLocation</a></code>
148      directive. Typically this login page will contain an HTML form, asking the user to
149      provide their usename and password.</p>
150
151      <div class="example"><h3>Example login form</h3><pre class="prettyprint lang-html">&lt;form method="POST" action="/dologin.html"&gt;
152  Username: &lt;input type="text" name="httpd_username" value="" /&gt;
153  Password: &lt;input type="password" name="httpd_password" value="" /&gt;
154  &lt;input type="submit" name="login" value="Login" /&gt;
155&lt;/form&gt;</pre>
156</div>
157
158      <p>The part that does the actual login is handled by the <var>form-login-handler</var>.
159      The action of the form should point at this handler, which is configured within
160      Apache httpd as follows:</p>
161
162      <div class="example"><h3>Form login handler example</h3><pre class="prettyprint lang-config">&lt;Location /dologin.html&gt;
163    SetHandler form-login-handler
164    AuthFormLoginRequiredLocation http://example.com/login.html
165    AuthFormLoginSuccessLocation http://example.com/success.html
166    AuthFormProvider file
167    AuthUserFile conf/passwd
168    AuthType form
169    AuthName realm
170    Session On
171    SessionCookieName session path=/
172    SessionCryptoPassphrase secret
173&lt;/Location&gt;</pre>
174</div>
175
176      <p>The URLs specified by the
177      <code class="directive"><a href="#authformloginrequiredlocation">AuthFormLoginRequiredLocation</a></code> directive will typically
178      point to a page explaining to the user that their login attempt was unsuccessful, and they
179      should try again.  The <code class="directive"><a href="#authformloginsuccesslocation">AuthFormLoginSuccessLocation</a></code>
180      directive specifies the URL the user should be redirected to upon successful login.</p>
181
182      <p>Alternatively, the URL to redirect the user to on success can be embedded within the login
183      form, as in the example below. As a result, the same <var>form-login-handler</var> can be
184      reused for different areas of a website.</p>
185
186      <div class="example"><h3>Example login form with location</h3><pre class="prettyprint lang-html">&lt;form method="POST" action="/dologin.html"&gt;
187  Username: &lt;input type="text" name="httpd_username" value="" /&gt;
188  Password: &lt;input type="password" name="httpd_password" value="" /&gt;
189  &lt;input type="submit" name="login" value="Login" /&gt;
190  &lt;input type="hidden" name="httpd_location" value="http://example.com/success.html" /&gt;
191&lt;/form&gt;</pre>
192</div>
193
194    </div><div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
195<div class="section">
196<h2><a name="inline" id="inline">Inline Login</a></h2>
197
198      <div class="warning"><h3>Warning</h3>
199        <p>A risk exists that under certain circumstances, the login form configured
200        using inline login may be submitted more than once, revealing login credentials to
201        the application running underneath. The administrator must ensure that the underlying
202        application is properly secured to prevent abuse. If in doubt, use the
203        standalone login configuration.</p>
204      </div>
205
206      <p>As an alternative to having a dedicated login page for a website, it is possible to
207      configure <code class="module"><a href="/mod/mod_auth_form.html">mod_auth_form</a></code> to authenticate users inline, without being
208      redirected to another page. This allows the state of the current page to be preserved
209      during the login attempt. This can be useful in a situation where a time limited
210      session is in force, and the session times out in the middle of the user request. The
211      user can be re-authenticated in place, and they can continue where they left off.</p>
212
213      <p>If a non-authenticated user attempts to access a page protected by
214      <code class="module"><a href="/mod/mod_auth_form.html">mod_auth_form</a></code> that isn't configured with a
215      <code class="directive"><a href="#authformloginrequiredlocation">AuthFormLoginRequiredLocation</a></code> directive,
216      a <var>HTTP_UNAUTHORIZED</var> status code is returned to the browser indicating to the user
217      that they are not authorized to view the page.</p>
218
219      <p>To configure inline authentication, the administrator overrides the error document
220      returned by the <var>HTTP_UNAUTHORIZED</var> status code with a custom error document
221      containing the login form, as follows:</p>
222
223      <div class="example"><h3>Basic inline example</h3><pre class="prettyprint lang-config">AuthFormProvider file
224ErrorDocument 401 /login.shtml
225AuthUserFile conf/passwd
226AuthType form
227AuthName realm
228AuthFormLoginRequiredLocation http://example.com/login.html
229Session On
230SessionCookieName session path=/
231SessionCryptoPassphrase secret</pre>
232</div>
233
234      <p>The error document page should contain a login form with an empty action property,
235      as per the example below.  This has the effect of submitting the form to
236      the original protected URL, without the page having to know what that
237      URL is.</p>
238
239      <div class="example"><h3>Example inline login form</h3><pre class="prettyprint lang-html">&lt;form method="POST" <strong>action=""</strong>&gt;
240  Username: &lt;input type="text" name="httpd_username" value="" /&gt;
241  Password: &lt;input type="password" name="httpd_password" value="" /&gt;
242  &lt;input type="submit" name="login" value="Login" /&gt;
243&lt;/form&gt;</pre>
244</div>
245
246      <p>When the end user has filled in their login details, the form will make
247      an HTTP POST request to the original password protected URL.
248      <code class="module"><a href="/mod/mod_auth_form.html">mod_auth_form</a></code> will intercept this POST request, and if
249      HTML fields are found present for the username and password, the user
250      will be logged in, and the original password protected URL will be returned
251      to the user as a GET request.</p>
252
253    </div><div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
254<div class="section">
255<h2><a name="inlinepreservebody" id="inlinepreservebody">Inline Login with Body Preservation</a></h2>
256
257      <p>A limitation of the inline login technique described above is that should an
258      HTML form POST have resulted in the request to authenticate or
259      reauthenticate, the
260      contents of the original form posted by the browser will be lost. Depending on
261      the function of the website, this could present significant inconvenience for the
262      end user.</p>
263
264      <p><code class="module"><a href="/mod/mod_auth_form.html">mod_auth_form</a></code> addresses this by allowing the method and body
265      of the original request to be embedded in the login form. If authentication
266      is successful, the original method and body will be retried by Apache httpd, preserving
267      the state of the original request.</p>
268
269      <p>To enable body preservation, add three additional fields to the login form as
270      per the example below.</p>
271
272      <div class="example"><h3>Example with body preservation</h3><pre class="prettyprint lang-html">&lt;form method="POST" action=""&gt;
273  Username: &lt;input type="text" name="httpd_username" value="" /&gt;
274  Password: &lt;input type="password" name="httpd_password" value="" /&gt;
275  &lt;input type="submit" name="login" value="Login" /&gt;
276  <br />  <strong>&lt;input type="hidden" name="httpd_method" value="POST" /&gt;
277  &lt;input type="hidden" name="httpd_mimetype" value="application/x-www-form-urlencoded" /&gt;
278  &lt;input type="hidden" name="httpd_body" value="name1=value1&amp;name2=value2" /&gt;</strong><br />
279&lt;/form&gt;</pre>
280</div>
281
282      <p>How the method, mimetype and body of the original request are embedded within the
283      login form will depend on the platform and technology being used within the website.
284      </p>
285
286      <p>One option is to use the <code class="module"><a href="/mod/mod_include.html">mod_include</a></code> module along with the
287      <code class="directive"><a href="/mod/mod_request.html#keptbodysize">KeptBodySize</a></code> directive, along with a suitable
288      CGI script to embed the variables in the form.</p>
289
290      <p>Another option is to render the login form using a CGI script or other dynamic
291      technology.</p>
292
293      <div class="example"><h3>CGI example</h3><pre class="prettyprint lang-config">        AuthFormProvider file
294        ErrorDocument 401 /cgi-bin/login.cgi
295        ...</pre>
296</div>
297
298    </div><div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
299<div class="section">
300<h2><a name="loggingout" id="loggingout">Logging Out</a></h2>
301
302      <p>To enable a user to log out of a particular session, configure a page to
303      be handled by the <var>form-logout-handler</var>. Any attempt to access this
304      URL will cause the username and password to be removed from the current
305      session, effectively logging the user out.</p>
306
307      <p>By setting the
308      <code class="directive"><a href="#authformlogoutlocation">AuthFormLogoutLocation</a></code> directive,
309      a URL can be specified that the browser will be redirected to on successful
310      logout. This URL might explain to the user that they have been logged out, and
311      give the user the option to log in again.</p>
312
313      <div class="example"><h3>Basic logout example</h3><pre class="prettyprint lang-config">SetHandler form-logout-handler
314AuthName realm
315AuthFormLogoutLocation http://example.com/loggedout.html
316Session On
317SessionCookieName session path=/
318SessionCryptoPassphrase secret</pre>
319</div>
320
321      <p>Note that logging a user out does not delete the session; it merely removes
322      the username and password from the session. If this results in an empty session,
323      the net effect will be the removal of that session, but this is not
324      guaranteed. If you want to guarantee the removal of a session, set the
325      <code class="directive"><a href="/mod/mod_session.html#sessionmaxage">SessionMaxAge</a></code> directive to a small
326      value, like 1 (setting the directive to zero would mean no session age limit).
327      </p>
328
329      <div class="example"><h3>Basic session expiry example</h3><pre class="prettyprint lang-config">SetHandler form-logout-handler
330AuthFormLogoutLocation http://example.com/loggedout.html
331Session On
332SessionMaxAge 1
333SessionCookieName session path=/
334SessionCryptoPassphrase secret</pre>
335</div>
336
337    </div><div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
338<div class="section">
339<h2><a name="urlencoding" id="urlencoding">Usernames and Passwords</a></h2>
340    <p>Note that form submission involves URLEncoding the form data:
341    in this case the username and password.  You should therefore
342    pick usernames and passwords that avoid characters that are
343    URLencoded in form submission, or you may get unexpected results.</p>
344    </div>
345<div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
346<div class="directive-section"><h2><a name="AuthFormAuthoritative" id="AuthFormAuthoritative">AuthFormAuthoritative</a> <a name="authformauthoritative" id="authformauthoritative">Directive</a></h2>
347<table class="directive">
348<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Sets whether authorization and authentication are passed to
349lower level modules</td></tr>
350<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>AuthFormAuthoritative On|Off</code></td></tr>
351<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>AuthFormAuthoritative On</code></td></tr>
352<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>directory, .htaccess</td></tr>
353<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>AuthConfig</td></tr>
354<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
355<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_auth_form</td></tr>
356</table>
357    <p>Normally, each authorization module listed in <code class="directive"><a href="#authformprovider">AuthFormProvider</a></code> will attempt
358    to verify the user, and if the user is not found in any provider,
359    access will be denied. Setting the
360    <code class="directive">AuthFormAuthoritative</code> directive explicitly
361    to <code>Off</code> allows for both authentication and
362    authorization to be passed on to other non-provider-based modules
363    if there is <strong>no userID</strong> or <strong>rule</strong>
364    matching the supplied userID.  This should only be necessary when
365    combining <code class="module"><a href="/mod/mod_auth_form.html">mod_auth_form</a></code> with third-party modules
366    that are not configured with the <code class="directive"><a href="#authformprovider">AuthFormProvider</a></code>
367    directive.  When using such modules, the order of processing
368    is determined in the modules' source code and is not configurable.</p>
369
370</div>
371<div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
372<div class="directive-section"><h2><a name="AuthFormBody" id="AuthFormBody">AuthFormBody</a> <a name="authformbody" id="authformbody">Directive</a></h2>
373<table class="directive">
374<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>The name of a form field carrying the body of the request to attempt on successful login</td></tr>
375<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>AuthFormBody <var>fieldname</var></code></td></tr>
376<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>httpd_body</code></td></tr>
377<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>directory</td></tr>
378<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
379<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_auth_form</td></tr>
380<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>Available in Apache HTTP Server 2.3.0 and later</td></tr>
381</table>
382    <p>The <code class="directive"><a href="#authformmethod">AuthFormMethod</a></code> directive specifies
383    the name of an HTML field which, if present, will contain the method of the request to
384    to submit should login be successful.</p>
385
386    <p>By populating the form with fields described by
387    <code class="directive"><a href="#authformmethod">AuthFormMethod</a></code>,
388    <code class="directive"><a href="#authformmimetype">AuthFormMimetype</a></code> and
389    <code class="directive"><a href="#authformbody">AuthFormBody</a></code>, a website can retry
390    a request that may have been interrupted by the login screen, or by a session
391    timeout.</p>
392
393</div>
394<div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
395<div class="directive-section"><h2><a name="AuthFormDisableNoStore" id="AuthFormDisableNoStore">AuthFormDisableNoStore</a> <a name="authformdisablenostore" id="authformdisablenostore">Directive</a></h2>
396<table class="directive">
397<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Disable the CacheControl no-store header on the login page</td></tr>
398<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>AuthFormDisableNoStore <var>On|Off</var></code></td></tr>
399<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>AuthFormDisableNoStore Off</code></td></tr>
400<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>directory</td></tr>
401<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
402<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_auth_form</td></tr>
403<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>Available in Apache HTTP Server 2.3.0 and later</td></tr>
404</table>
405    <p>The <code class="directive"><a href="#authformdisablenostore">AuthFormDisableNoStore</a></code> flag
406    disables the sending of a <code>Cache-Control no-store</code> header with the
407    error 401 page returned when the user is not yet logged in. The purpose of the header
408    is to make it difficult for an <code>ecmascript</code> application to attempt to resubmit the
409    login form, and reveal the username and password to the backend application. Disable
410    at your own risk.</p>
411
412
413</div>
414<div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
415<div class="directive-section"><h2><a name="AuthFormFakeBasicAuth" id="AuthFormFakeBasicAuth">AuthFormFakeBasicAuth</a> <a name="authformfakebasicauth" id="authformfakebasicauth">Directive</a></h2>
416<table class="directive">
417<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Fake a Basic Authentication header</td></tr>
418<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>AuthFormFakeBasicAuth <var>On|Off</var></code></td></tr>
419<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>AuthFormFakeBasicAuth Off</code></td></tr>
420<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>directory</td></tr>
421<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
422<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_auth_form</td></tr>
423<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>Available in Apache HTTP Server 2.3.0 and later</td></tr>
424</table>
425    <p>The <code class="directive"><a href="#authformfakebasicauth">AuthFormFakeBasicAuth</a></code> flag
426    determines whether a <code>Basic Authentication</code> header will be added to
427    the request headers. This can be used to expose the username and password to
428    an underlying application, without the underlying application having to be aware
429    of how the login was achieved.</p>
430
431
432</div>
433<div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
434<div class="directive-section"><h2><a name="AuthFormLocation" id="AuthFormLocation">AuthFormLocation</a> <a name="authformlocation" id="authformlocation">Directive</a></h2>
435<table class="directive">
436<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>The name of a form field carrying a URL to redirect to on successful login</td></tr>
437<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>AuthFormLocation <var>fieldname</var></code></td></tr>
438<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>httpd_location</code></td></tr>
439<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>directory</td></tr>
440<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
441<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_auth_form</td></tr>
442<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>Available in Apache HTTP Server 2.3.0 and later</td></tr>
443</table>
444    <p>The <code class="directive"><a href="#authformlocation">AuthFormLocation</a></code> directive specifies
445    the name of an HTML field which, if present, will contain a URL to redirect the browser to
446    should login be successful.</p>
447
448</div>
449<div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
450<div class="directive-section"><h2><a name="AuthFormLoginRequiredLocation" id="AuthFormLoginRequiredLocation">AuthFormLoginRequiredLocation</a> <a name="authformloginrequiredlocation" id="authformloginrequiredlocation">Directive</a></h2>
451<table class="directive">
452<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>The URL of the page to be redirected to should login be required</td></tr>
453<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>AuthFormLoginRequiredLocation <var>url</var></code></td></tr>
454<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>none</code></td></tr>
455<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>directory</td></tr>
456<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
457<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_auth_form</td></tr>
458<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>Available in Apache HTTP Server 2.3.0 and later. The use of the expression
459parser hass been added in 2.4.4.</td></tr>
460</table>
461    <p>The <code class="directive"><a href="#authformloginrequiredlocation">AuthFormLoginRequiredLocation</a></code> directive
462    specifies the URL to redirect to should the user not be authorised to view a page. The value
463    is parsed using the <a href="/expr.html">ap_expr</a> parser before being sent to the client.
464    By default, if a user is not authorised to view a page, the HTTP response code
465    <code>HTTP_UNAUTHORIZED</code> will be returned with the page specified by the
466    <code class="directive"><a href="/mod/core.html#errordocument">ErrorDocument</a></code> directive. This directive overrides this
467    default.</p>
468
469    <p>Use this directive if you have a dedicated login page to redirect users to.</p>
470
471
472</div>
473<div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
474<div class="directive-section"><h2><a name="AuthFormLoginSuccessLocation" id="AuthFormLoginSuccessLocation">AuthFormLoginSuccessLocation</a> <a name="authformloginsuccesslocation" id="authformloginsuccesslocation">Directive</a></h2>
475<table class="directive">
476<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>The URL of the page to be redirected to should login be successful</td></tr>
477<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>AuthFormLoginSuccessLocation <var>url</var></code></td></tr>
478<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>none</code></td></tr>
479<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>directory</td></tr>
480<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
481<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_auth_form</td></tr>
482<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>Available in Apache HTTP Server 2.3.0 and later. The use of the expression
483parser hass been added in 2.4.4.</td></tr>
484</table>
485    <p>The <code class="directive"><a href="#authformloginsuccesslocation">AuthFormLoginSuccessLocation</a></code> directive
486    specifies the URL to redirect to should the user have logged in successfully. The value is
487    parsed using the <a href="/expr.html">ap_expr</a> parser before being sent to the client.
488    This directive can be overridden if a form field has been defined containing another URL
489    using the <code class="directive"><a href="#authformlocation">AuthFormLocation</a></code> directive.</p>
490
491    <p>Use this directive if you have a dedicated login URL, and you have not embedded the
492    destination page in the login form.</p>
493
494
495</div>
496<div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
497<div class="directive-section"><h2><a name="AuthFormLogoutLocation" id="AuthFormLogoutLocation">AuthFormLogoutLocation</a> <a name="authformlogoutlocation" id="authformlogoutlocation">Directive</a></h2>
498<table class="directive">
499<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>The URL to redirect to after a user has logged out</td></tr>
500<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>AuthFormLogoutLocation <var>uri</var></code></td></tr>
501<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>none</code></td></tr>
502<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>directory</td></tr>
503<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
504<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_auth_form</td></tr>
505<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>Available in Apache HTTP Server 2.3.0 and later. The use of the expression
506parser hass been added in 2.4.4.</td></tr>
507</table>
508    <p>The <code class="directive"><a href="#authformlogoutlocation">AuthFormLogoutLocation</a></code> directive
509    specifies the URL of a page on the server to redirect to should the user attempt to log
510    out. The value is parsed using the <a href="/expr.html">ap_expr</a> parser before
511    being sent to the client.</p>
512
513    <p>When a URI is accessed that is served by the handler <code>form-logout-handler</code>,
514    the page specified by this directive will be shown to the end user. For example:</p>
515
516    <div class="example"><h3>Example</h3><pre class="prettyprint lang-config">&lt;Location /logout&gt;
517    SetHandler form-logout-handler
518    AuthFormLogoutLocation http://example.com/loggedout.html
519    Session on
520    #...
521&lt;/Location&gt;</pre>
522</div>
523
524    <p>An attempt to access the URI <var>/logout/</var> will result in the user being logged
525    out, and the page <var>/loggedout.html</var> will be displayed. Make sure that the page
526    <var>loggedout.html</var> is not password protected, otherwise the page will not be
527    displayed.</p>
528
529
530</div>
531<div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
532<div class="directive-section"><h2><a name="AuthFormMethod" id="AuthFormMethod">AuthFormMethod</a> <a name="authformmethod" id="authformmethod">Directive</a></h2>
533<table class="directive">
534<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>The name of a form field carrying the method of the request to attempt on successful login</td></tr>
535<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>AuthFormMethod <var>fieldname</var></code></td></tr>
536<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>httpd_method</code></td></tr>
537<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>directory</td></tr>
538<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
539<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_auth_form</td></tr>
540<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>Available in Apache HTTP Server 2.3.0 and later</td></tr>
541</table>
542    <p>The <code class="directive"><a href="#authformmethod">AuthFormMethod</a></code> directive specifies
543    the name of an HTML field which, if present, will contain the method of the request to
544    to submit should login be successful.</p>
545
546    <p>By populating the form with fields described by
547    <code class="directive"><a href="#authformmethod">AuthFormMethod</a></code>,
548    <code class="directive"><a href="#authformmimetype">AuthFormMimetype</a></code> and
549    <code class="directive"><a href="#authformbody">AuthFormBody</a></code>, a website can retry
550    a request that may have been interrupted by the login screen, or by a session
551    timeout.</p>
552
553</div>
554<div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
555<div class="directive-section"><h2><a name="AuthFormMimetype" id="AuthFormMimetype">AuthFormMimetype</a> <a name="authformmimetype" id="authformmimetype">Directive</a></h2>
556<table class="directive">
557<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>The name of a form field carrying the mimetype of the body of the request to attempt on successful login</td></tr>
558<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>AuthFormMimetype <var>fieldname</var></code></td></tr>
559<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>httpd_mimetype</code></td></tr>
560<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>directory</td></tr>
561<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
562<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_auth_form</td></tr>
563<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>Available in Apache HTTP Server 2.3.0 and later</td></tr>
564</table>
565    <p>The <code class="directive"><a href="#authformmethod">AuthFormMethod</a></code> directive specifies
566    the name of an HTML field which, if present, will contain the
567    mimetype of the request to to submit should login be successful.</p>
568
569    <p>By populating the form with fields described by
570    <code class="directive"><a href="#authformmethod">AuthFormMethod</a></code>,
571    <code class="directive"><a href="#authformmimetype">AuthFormMimetype</a></code> and
572    <code class="directive"><a href="#authformbody">AuthFormBody</a></code>, a website can retry
573    a request that may have been interrupted by the login screen, or by a session
574    timeout.</p>
575
576</div>
577<div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
578<div class="directive-section"><h2><a name="AuthFormPassword" id="AuthFormPassword">AuthFormPassword</a> <a name="authformpassword" id="authformpassword">Directive</a></h2>
579<table class="directive">
580<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>The name of a form field carrying the login password</td></tr>
581<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>AuthFormPassword <var>fieldname</var></code></td></tr>
582<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>httpd_password</code></td></tr>
583<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>directory</td></tr>
584<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
585<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_auth_form</td></tr>
586<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>Available in Apache HTTP Server 2.3.0 and later</td></tr>
587</table>
588    <p>The <code class="directive"><a href="#authformpassword">AuthFormPassword</a></code> directive specifies
589    the name of an HTML field which, if present, will contain the password to be used to log
590    in.</p>
591
592</div>
593<div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
594<div class="directive-section"><h2><a name="AuthFormProvider" id="AuthFormProvider">AuthFormProvider</a> <a name="authformprovider" id="authformprovider">Directive</a></h2>
595<table class="directive">
596<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Sets the authentication provider(s) for this location</td></tr>
597<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>AuthFormProvider <var>provider-name</var>
598[<var>provider-name</var>] ...</code></td></tr>
599<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>AuthFormProvider file</code></td></tr>
600<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>directory, .htaccess</td></tr>
601<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>AuthConfig</td></tr>
602<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
603<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_auth_form</td></tr>
604</table>
605    <p>The <code class="directive">AuthFormProvider</code> directive sets
606    which provider is used to authenticate the users for this location.
607    The default <code>file</code> provider is implemented
608    by the <code class="module"><a href="/mod/mod_authn_file.html">mod_authn_file</a></code> module.  Make sure
609    that the chosen provider module is present in the server.</p>
610
611    <div class="example"><h3>Example</h3><pre class="prettyprint lang-config">&lt;Location /secure&gt;
612    AuthType form
613    AuthName "private area"
614    AuthFormProvider  dbm
615    AuthDBMType        SDBM
616    AuthDBMUserFile    /www/etc/dbmpasswd
617    Require            valid-user
618    #...
619&lt;/Location&gt;</pre>
620</div>
621
622    <p>Providers are implemented by <code class="module"><a href="/mod/mod_authn_dbm.html">mod_authn_dbm</a></code>,
623    <code class="module"><a href="/mod/mod_authn_file.html">mod_authn_file</a></code>, <code class="module"><a href="/mod/mod_authn_dbd.html">mod_authn_dbd</a></code>,
624    <code class="module"><a href="/mod/mod_authnz_ldap.html">mod_authnz_ldap</a></code> and <code class="module"><a href="/mod/mod_authn_socache.html">mod_authn_socache</a></code>.</p>
625
626</div>
627<div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
628<div class="directive-section"><h2><a name="AuthFormSitePassphrase" id="AuthFormSitePassphrase">AuthFormSitePassphrase</a> <a name="authformsitepassphrase" id="authformsitepassphrase">Directive</a></h2>
629<table class="directive">
630<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Bypass authentication checks for high traffic sites</td></tr>
631<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>AuthFormSitePassphrase <var>secret</var></code></td></tr>
632<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>none</code></td></tr>
633<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>directory</td></tr>
634<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
635<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_auth_form</td></tr>
636<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>Available in Apache HTTP Server 2.3.0 and later</td></tr>
637</table>
638    <p>The <code class="directive"><a href="#authformsitepassphrase">AuthFormSitePassphrase</a></code> directive
639    specifies a passphrase which, if present in the user session, causes Apache httpd to
640    bypass authentication checks for the given URL. It can be used on high traffic websites
641    to reduce the load induced on authentication infrastructure.</p>
642
643    <p>The passphrase can be inserted into a user session by adding this directive to the
644    configuration for the <var>form-login-handler</var>. The <var>form-login-handler</var>
645    itself will always run the authentication checks, regardless of whether a passphrase
646    is specified or not.</p>
647
648    <div class="warning"><h3>Warning</h3>
649      <p>If the session is exposed to the user through the use of
650      <code class="module"><a href="/mod/mod_session_cookie.html">mod_session_cookie</a></code>, and the session is not protected with
651      <code class="module"><a href="/mod/mod_session_crypto.html">mod_session_crypto</a></code>, the passphrase is open to potential exposure
652      through a dictionary attack. Regardless of how the session is configured,
653      ensure that this directive is not used within URL spaces where private user data
654      could be exposed, or sensitive transactions can be conducted. Use at own risk.</p>
655    </div>
656
657
658</div>
659<div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
660<div class="directive-section"><h2><a name="AuthFormSize" id="AuthFormSize">AuthFormSize</a> <a name="authformsize" id="authformsize">Directive</a></h2>
661<table class="directive">
662<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>The largest size of the form in bytes that will be parsed for the login details</td></tr>
663<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>AuthFormSize <var>size</var></code></td></tr>
664<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>8192</code></td></tr>
665<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>directory</td></tr>
666<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
667<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_auth_form</td></tr>
668<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>Available in Apache HTTP Server 2.3.0 and later</td></tr>
669</table>
670    <p>The <code class="directive"><a href="#authformsize">AuthFormSize</a></code> directive specifies
671    the maximum size of the body of the request that will be parsed to find the login form.</p>
672
673    <p>If a login request arrives that exceeds this size, the whole request will be aborted
674    with the HTTP response code <code>HTTP_REQUEST_TOO_LARGE</code>.</p>
675
676    <p>If you have populated the form with fields described by
677    <code class="directive"><a href="#authformmethod">AuthFormMethod</a></code>,
678    <code class="directive"><a href="#authformmimetype">AuthFormMimetype</a></code> and
679    <code class="directive"><a href="#authformbody">AuthFormBody</a></code>, you probably want to set this
680    field to a similar size as the <code class="directive"><a href="/mod/mod_request.html#keptbodysize">KeptBodySize</a></code>
681    directive.</p>
682
683
684</div>
685<div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
686<div class="directive-section"><h2><a name="AuthFormUsername" id="AuthFormUsername">AuthFormUsername</a> <a name="authformusername" id="authformusername">Directive</a></h2>
687<table class="directive">
688<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>The name of a form field carrying the login username</td></tr>
689<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>AuthFormUsername <var>fieldname</var></code></td></tr>
690<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>httpd_username</code></td></tr>
691<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>directory</td></tr>
692<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
693<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_auth_form</td></tr>
694<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>Available in Apache HTTP Server 2.3.0 and later</td></tr>
695</table>
696    <p>The <code class="directive"><a href="#authformusername">AuthFormUsername</a></code> directive specifies
697    the name of an HTML field which, if present, will contain the username to be used to log
698    in.</p>
699
700</div>
701</div>
702<div class="bottomlang">
703<p><span>Available Languages: </span><a href="/en/mod/mod_auth_form.html" title="English">&nbsp;en&nbsp;</a> |
704<a href="/fr/mod/mod_auth_form.html" hreflang="fr" rel="alternate" title="Fran�ais">&nbsp;fr&nbsp;</a></p>
705</div><div class="top"><a href="#page-header"><img src="/images/up.gif" alt="top" /></a></div><div class="section"><h2><a id="comments_section" name="comments_section">Comments</a></h2><div class="warning"><strong>Notice:</strong><br />This is not a Q&amp;A section. Comments placed here should be pointed towards suggestions on improving the documentation or server, and may be removed again by our moderators if they are either implemented or considered invalid/off-topic. Questions on how to manage the Apache HTTP Server should be directed at either our IRC channel, #httpd, on Freenode, or sent to our <a href="http://httpd.apache.org/lists.html">mailing lists</a>.</div>
706<script type="text/javascript"><!--//--><![CDATA[//><!--
707var comments_shortname = 'httpd';
708var comments_identifier = 'http://httpd.apache.org/docs/2.4/mod/mod_auth_form.html';
709(function(w, d) {
710    if (w.location.hostname.toLowerCase() == "httpd.apache.org") {
711        d.write('<div id="comments_thread"><\/div>');
712        var s = d.createElement('script');
713        s.type = 'text/javascript';
714        s.async = true;
715        s.src = 'https://comments.apache.org/show_comments.lua?site=' + comments_shortname + '&page=' + comments_identifier;
716        (d.getElementsByTagName('head')[0] || d.getElementsByTagName('body')[0]).appendChild(s);
717    }
718    else { 
719        d.write('<div id="comments_thread">Comments are disabled for this page at the moment.<\/div>');
720    }
721})(window, document);
722//--><!]]></script></div><div id="footer">
723<p class="apache">Copyright 2014 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
724<p class="menu"><a href="/mod/">Modules</a> | <a href="/mod/directives.html">Directives</a> | <a href="http://wiki.apache.org/httpd/FAQ">FAQ</a> | <a href="/glossary.html">Glossary</a> | <a href="/sitemap.html">Sitemap</a></p></div><script type="text/javascript"><!--//--><![CDATA[//><!--
725if (typeof(prettyPrint) !== 'undefined') {
726    prettyPrint();
727}
728//--><!]]></script>
729</body></html>