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="<-" alt="<-" src="/images/left.gif" /></a></div> 22<div id="path"> 23<a href="http://www.apache.org/">Apache</a> > <a href="http://httpd.apache.org/">HTTP Server</a> > <a href="http://httpd.apache.org/docs/">Documentation</a> > <a href="../">Version 2.4</a> > <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"> en </a> | 28<a href="/fr/mod/mod_auth_form.html" hreflang="fr" rel="alternate" title="Fran�ais"> fr </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"><form method="POST" action="/dologin.html"> 152 Username: <input type="text" name="httpd_username" value="" /> 153 Password: <input type="password" name="httpd_password" value="" /> 154 <input type="submit" name="login" value="Login" /> 155</form></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"><Location /dologin.html> 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</Location></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"><form method="POST" action="/dologin.html"> 187 Username: <input type="text" name="httpd_username" value="" /> 188 Password: <input type="password" name="httpd_password" value="" /> 189 <input type="submit" name="login" value="Login" /> 190 <input type="hidden" name="httpd_location" value="http://example.com/success.html" /> 191</form></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"><form method="POST" <strong>action=""</strong>> 240 Username: <input type="text" name="httpd_username" value="" /> 241 Password: <input type="password" name="httpd_password" value="" /> 242 <input type="submit" name="login" value="Login" /> 243</form></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"><form method="POST" action=""> 273 Username: <input type="text" name="httpd_username" value="" /> 274 Password: <input type="password" name="httpd_password" value="" /> 275 <input type="submit" name="login" value="Login" /> 276 <br /> <strong><input type="hidden" name="httpd_method" value="POST" /> 277 <input type="hidden" name="httpd_mimetype" value="application/x-www-form-urlencoded" /> 278 <input type="hidden" name="httpd_body" value="name1=value1&name2=value2" /></strong><br /> 279</form></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"><Location /logout> 517 SetHandler form-logout-handler 518 AuthFormLogoutLocation http://example.com/loggedout.html 519 Session on 520 #... 521</Location></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"><Location /secure> 612 AuthType form 613 AuthName "private area" 614 AuthFormProvider dbm 615 AuthDBMType SDBM 616 AuthDBMUserFile /www/etc/dbmpasswd 617 Require valid-user 618 #... 619</Location></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"> en </a> | 704<a href="/fr/mod/mod_auth_form.html" hreflang="fr" rel="alternate" title="Fran�ais"> fr </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&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>