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>Authentication and Authorization - 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.js" type="text/javascript"> 13</script> 14 15<link href="/images/favicon.ico" rel="shortcut icon" /></head> 16<body id="manual-page"><div id="page-header"> 17<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> 18<p class="apache">Apache HTTP Server Version 2.2</p> 19<img alt="" src="/images/feather.gif" /></div> 20<div class="up"><a href="./"><img title="<-" alt="<-" src="/images/left.gif" /></a></div> 21<div id="path"> 22<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.2</a> > <a href="./">How-To / Tutorials</a></div><div id="page-content"><div id="preamble"><h1>Authentication and Authorization</h1> 23<div class="toplang"> 24<p><span>Available Languages: </span><a href="/en/howto/auth.html" title="English"> en </a> | 25<a href="/fr/howto/auth.html" hreflang="fr" rel="alternate" title="Fran�ais"> fr </a> | 26<a href="/ja/howto/auth.html" hreflang="ja" rel="alternate" title="Japanese"> ja </a> | 27<a href="/ko/howto/auth.html" hreflang="ko" rel="alternate" title="Korean"> ko </a> | 28<a href="/tr/howto/auth.html" hreflang="tr" rel="alternate" title="T�rk�e"> tr </a></p> 29</div> 30 31 <p>Authentication is any process by which you verify that 32 someone is who they claim they are. Authorization is any 33 process by which someone is allowed to be where they want to 34 go, or to have information that they want to have.</p> 35 36 <p>For general access control, see the <a href="access.html">Access 37 Control How-To</a>.</p> 38</div> 39<div id="quickview"><ul id="toc"><li><img alt="" src="/images/down.gif" /> <a href="#related">Related Modules and Directives</a></li> 40<li><img alt="" src="/images/down.gif" /> <a href="#introduction">Introduction</a></li> 41<li><img alt="" src="/images/down.gif" /> <a href="#theprerequisites">The Prerequisites</a></li> 42<li><img alt="" src="/images/down.gif" /> <a href="#gettingitworking">Getting it working</a></li> 43<li><img alt="" src="/images/down.gif" /> <a href="#satisfy">Satisfy</a></li> 44<li><img alt="" src="/images/down.gif" /> <a href="#lettingmorethanonepersonin">Letting more than one 45person in</a></li> 46<li><img alt="" src="/images/down.gif" /> <a href="#possibleproblems">Possible problems</a></li> 47<li><img alt="" src="/images/down.gif" /> <a href="#dbmdbd">Alternate password storage</a></li> 48<li><img alt="" src="/images/down.gif" /> <a href="#moreinformation">More information</a></li> 49</ul><ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div> 50<div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div> 51<div class="section"> 52<h2><a name="related" id="related">Related Modules and Directives</a></h2> 53 54<p>There are three types of modules involved in the authentication and 55authorization process. You will usually need to choose at least one 56module from each group.</p> 57 58<ul> 59 <li>Authentication type (see the 60 <code class="directive"><a href="/mod/core.html#authtype">AuthType</a></code> directive) 61 <ul> 62 <li><code class="module"><a href="/mod/mod_auth_basic.html">mod_auth_basic</a></code></li> 63 <li><code class="module"><a href="/mod/mod_auth_digest.html">mod_auth_digest</a></code></li> 64 </ul> 65 </li> 66 <li>Authentication provider (see the 67 <code class="directive"><a href="/mod/mod_auth_basic.html#authbasicprovider">AuthBasicProvider</a></code> and 68 <code class="directive"><a href="/mod/mod_auth_digest.html#authdigestprovider">AuthDigestProvider</a></code> directives) 69 70 <ul> 71 <li><code class="module"><a href="/mod/mod_authn_anon.html">mod_authn_anon</a></code></li> 72 <li><code class="module"><a href="/mod/mod_authn_dbd.html">mod_authn_dbd</a></code></li> 73 <li><code class="module"><a href="/mod/mod_authn_dbm.html">mod_authn_dbm</a></code></li> 74 <li><code class="module"><a href="/mod/mod_authn_file.html">mod_authn_file</a></code></li> 75 <li><code class="module"><a href="/mod/mod_authnz_ldap.html">mod_authnz_ldap</a></code></li> 76 </ul> 77 </li> 78 <li>Authorization (see the 79 <code class="directive"><a href="/mod/core.html#require">Require</a></code> directive) 80 <ul> 81 <li><code class="module"><a href="/mod/mod_authnz_ldap.html">mod_authnz_ldap</a></code></li> 82 <li><code class="module"><a href="/mod/mod_authz_dbm.html">mod_authz_dbm</a></code></li> 83 <li><code class="module"><a href="/mod/mod_authz_groupfile.html">mod_authz_groupfile</a></code></li> 84 <li><code class="module"><a href="/mod/mod_authz_host.html">mod_authz_host</a></code></li> 85 <li><code class="module"><a href="/mod/mod_authz_owner.html">mod_authz_owner</a></code></li> 86 <li><code class="module"><a href="/mod/mod_authz_user.html">mod_authz_user</a></code></li> 87 </ul> 88 </li> 89</ul> 90 91 <p>The module <code class="module"><a href="/mod/mod_authnz_ldap.html">mod_authnz_ldap</a></code> is both an 92 authentication and authorization provider. The module 93 <code class="module"><a href="/mod/mod_authn_alias.html">mod_authn_alias</a></code> is not an authentication provider 94 in itself, but allows other authentication providers to be 95 configured in a flexible manner.</p> 96 97 <p>The module <code class="module"><a href="/mod/mod_authz_host.html">mod_authz_host</a></code> provides authorization 98 and access control based on hostname, IP address or characteristics 99 of the request, but is not part of the authentication provider 100 system.</p> 101 102 <p>You probably also want to take a look at the <a href="access.html">Access Control</a> howto, which discusses the 103 various ways to control access to your server.</p> 104 105</div><div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div> 106<div class="section"> 107<h2><a name="introduction" id="introduction">Introduction</a></h2> 108 <p>If you have information on your web site that is sensitive 109 or intended for only a small group of people, the techniques in 110 this article will help you make sure that the people that see 111 those pages are the people that you wanted to see them.</p> 112 113 <p>This article covers the "standard" way of protecting parts 114 of your web site that most of you are going to use.</p> 115 116 <div class="note"><h3>Note:</h3> 117 <p>If your data really needs to be secure, consider using 118 <code class="module"><a href="/mod/mod_ssl.html">mod_ssl</a></code> in addition to any authentication.</p> 119 </div> 120</div><div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div> 121<div class="section"> 122<h2><a name="theprerequisites" id="theprerequisites">The Prerequisites</a></h2> 123 <p>The directives discussed in this article will need to go 124 either in your main server configuration file (typically in a 125 <code class="directive"><a href="/mod/core.html#directory"><Directory></a></code> section), or 126 in per-directory configuration files (<code>.htaccess</code> files).</p> 127 128 <p>If you plan to use <code>.htaccess</code> files, you will 129 need to have a server configuration that permits putting 130 authentication directives in these files. This is done with the 131 <code class="directive"><a href="/mod/core.html#allowoverride">AllowOverride</a></code> directive, which 132 specifies which directives, if any, may be put in per-directory 133 configuration files.</p> 134 135 <p>Since we're talking here about authentication, you will need 136 an <code class="directive"><a href="/mod/core.html#allowoverride">AllowOverride</a></code> directive like the 137 following:</p> 138 139 <div class="example"><p><code> 140 AllowOverride AuthConfig 141 </code></p></div> 142 143 <p>Or, if you are just going to put the directives directly in 144 your main server configuration file, you will of course need to 145 have write permission to that file.</p> 146 147 <p>And you'll need to know a little bit about the directory 148 structure of your server, in order to know where some files are 149 kept. This should not be terribly difficult, and I'll try to 150 make this clear when we come to that point.</p> 151</div><div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div> 152<div class="section"> 153<h2><a name="gettingitworking" id="gettingitworking">Getting it working</a></h2> 154 <p>Here's the basics of password protecting a directory on your 155 server.</p> 156 157 <p>First, you need to create a password file. Exactly how you do 158 this will vary depending on what authentication provider you have 159 chosen. More on that later. To start with, we'll use a text password 160 file.</p> 161 162 <p>This file should be 163 placed somewhere not accessible from the web. This is so that 164 folks cannot download the password file. For example, if your 165 documents are served out of <code>/usr/local/apache/htdocs</code> you 166 might want to put the password file(s) in 167 <code>/usr/local/apache/passwd</code>.</p> 168 169 <p>To create the file, use the <code class="program"><a href="/programs/htpasswd.html">htpasswd</a></code> utility that 170 came with Apache. This will be located in the <code>bin</code> directory 171 of wherever you installed Apache. If you have installed Apache from 172 a third-party package, it may be in your execution path.</p> 173 174 <p>To create the file, type:</p> 175 176 <div class="example"><p><code> 177 htpasswd -c /usr/local/apache/passwd/passwords rbowen 178 </code></p></div> 179 180 <p><code class="program"><a href="/programs/htpasswd.html">htpasswd</a></code> will ask you for the password, and 181 then ask you to type it again to confirm it:</p> 182 183 <div class="example"><p><code> 184 # htpasswd -c /usr/local/apache/passwd/passwords rbowen<br /> 185 New password: mypassword<br /> 186 Re-type new password: mypassword<br /> 187 Adding password for user rbowen 188 </code></p></div> 189 190 <p>If <code class="program"><a href="/programs/htpasswd.html">htpasswd</a></code> is not in your path, of course 191 you'll have to type the full path to the file to get it to run. 192 With a default installation, it's located at 193 <code>/usr/local/apache2/bin/htpasswd</code></p> 194 195 <p>Next, you'll need to configure the server to request a 196 password and tell the server which users are allowed access. 197 You can do this either by editing the <code>httpd.conf</code> 198 file or using an <code>.htaccess</code> file. For example, if 199 you wish to protect the directory 200 <code>/usr/local/apache/htdocs/secret</code>, you can use the 201 following directives, either placed in the file 202 <code>/usr/local/apache/htdocs/secret/.htaccess</code>, or 203 placed in <code>httpd.conf</code> inside a <Directory 204 /usr/local/apache/apache/htdocs/secret> section.</p> 205 206 <div class="example"><p><code> 207 AuthType Basic<br /> 208 AuthName "Restricted Files"<br /> 209 # (Following line optional)<br /> 210 AuthBasicProvider file<br /> 211 AuthUserFile /usr/local/apache/passwd/passwords<br /> 212 Require user rbowen 213 </code></p></div> 214 215 <p>Let's examine each of those directives individually. The <code class="directive"><a href="/mod/core.html#authtype">AuthType</a></code> directive selects 216 that method that is used to authenticate the user. The most 217 common method is <code>Basic</code>, and this is the method 218 implemented by <code class="module"><a href="/mod/mod_auth_basic.html">mod_auth_basic</a></code>. It is important to be aware, 219 however, that Basic authentication sends the password from the client to 220 the server unencrypted. This method should therefore not be used for 221 highly sensitive data, unless accompanied by <code class="module"><a href="/mod/mod_ssl.html">mod_ssl</a></code>. 222 Apache supports one other authentication method: 223 <code>AuthType Digest</code>. This method is implemented by <code class="module"><a href="/mod/mod_auth_digest.html">mod_auth_digest</a></code> and is much more secure. Most recent 224 browsers support Digest authentication.</p> 225 226 <p>The <code class="directive"><a href="/mod/core.html#authname">AuthName</a></code> directive sets 227 the <dfn>Realm</dfn> to be used in the authentication. The realm serves 228 two major functions. First, the client often presents this information to 229 the user as part of the password dialog box. Second, it is used by the 230 client to determine what password to send for a given authenticated 231 area.</p> 232 233 <p>So, for example, once a client has authenticated in the 234 <code>"Restricted Files"</code> area, it will automatically 235 retry the same password for any area on the same server that is 236 marked with the <code>"Restricted Files"</code> Realm. 237 Therefore, you can prevent a user from being prompted more than 238 once for a password by letting multiple restricted areas share 239 the same realm. Of course, for security reasons, the client 240 will always need to ask again for the password whenever the 241 hostname of the server changes.</p> 242 243 <p>The <code class="directive"><a href="/mod/mod_auth_basic.html#authbasicprovider">AuthBasicProvider</a></code> is, 244 in this case, optional, since <code>file</code> is the default value 245 for this directive. You'll need to use this directive if you are 246 choosing a different source for authentication, such as 247 <code class="module"><a href="/mod/mod_authn_dbm.html">mod_authn_dbm</a></code> or <code class="module"><a href="/mod/mod_authn_dbd.html">mod_authn_dbd</a></code>.</p> 248 249 <p>The <code class="directive"><a href="/mod/mod_authn_file.html#authuserfile">AuthUserFile</a></code> 250 directive sets the path to the password file that we just 251 created with <code class="program"><a href="/programs/htpasswd.html">htpasswd</a></code>. If you have a large number 252 of users, it can be quite slow to search through a plain text 253 file to authenticate the user on each request. Apache also has 254 the ability to store user information in fast database files. 255 The <code class="module"><a href="/mod/mod_authn_dbm.html">mod_authn_dbm</a></code> module provides the <code class="directive"><a href="/mod/mod_authn_dbm.html#authdbmuserfile">AuthDBMUserFile</a></code> directive. These 256 files can be created and manipulated with the <code class="program"><a href="/programs/dbmmanage.html">dbmmanage</a></code> program. Many 257 other types of authentication options are available from third 258 party modules in the <a href="http://modules.apache.org/">Apache Modules 259 Database</a>.</p> 260 261 <p>Finally, the <code class="directive"><a href="/mod/core.html#require">Require</a></code> 262 directive provides the authorization part of the process by 263 setting the user that is allowed to access this region of the 264 server. In the next section, we discuss various ways to use the 265 <code class="directive"><a href="/mod/core.html#require">Require</a></code> directive.</p> 266</div><div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div> 267<div class="section"> 268<h2><a name="satisfy" id="satisfy">Satisfy</a></h2> 269 270<p>The <code class="directive"><a href="/mod/core.html#satisfy">Satisfy</a></code> directive can be used to specify 271that several criteria may be considered when trying to decide if a particular user 272will be granted admission. Satisfy can take as an argument one of two options - <code>all</code> 273or <code>any</code>. By default, it is assumed that the value is <code>all</code>. This means that if several 274criteria are specified, then all of them must be met in order for someone to get in. 275However, if set to <code>any</code>, then several criteria may be specified, but if 276the user satisfies any of these, then they will be granted entrance.</p> 277 278<p>An example of this is using access control to assure that, although a resource 279is password protected from outside your network, all hosts inside the network 280will be given unauthenticated access to the resource. This would be accomplished 281by using the Satisfy directive, as shown below.</p> 282 283<div class="example"><p><code> 284<Directory /usr/local/apache/htdocs/sekrit><br /> 285 <span class="indent"> 286 AuthType Basic<br /> 287 AuthName intranet<br /> 288 AuthUserFile /www/passwd/users<br /> 289 AuthGroupFile /www/passwd/groups<br /> 290 Require group customers<br /> 291 Order allow,deny<br /> 292 Allow from internal.com<br /> 293 Satisfy any<br /> 294 </span> 295</Directory> 296</code></p></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="lettingmorethanonepersonin" id="lettingmorethanonepersonin">Letting more than one 301person in</a></h2> 302 <p>The directives above only let one person (specifically 303 someone with a username of <code>rbowen</code>) into the 304 directory. In most cases, you'll want to let more than one 305 person in. This is where the <code class="directive"><a href="/mod/mod_authz_groupfile.html#authgroupfile">AuthGroupFile</a></code> comes in.</p> 306 307 <p>If you want to let more than one person in, you'll need to 308 create a group file that associates group names with a list of 309 users in that group. The format of this file is pretty simple, 310 and you can create it with your favorite editor. The contents 311 of the file will look like this:</p> 312 313 <div class="example"><p><code> 314 GroupName: rbowen dpitts sungo rshersey 315 </code></p></div> 316 317 <p>That's just a list of the members of the group in a long 318 line separated by spaces.</p> 319 320 <p>To add a user to your already existing password file, 321 type:</p> 322 323 <div class="example"><p><code> 324 htpasswd /usr/local/apache/passwd/passwords dpitts 325 </code></p></div> 326 327 <p>You'll get the same response as before, but it will be 328 appended to the existing file, rather than creating a new file. 329 (It's the <code>-c</code> that makes it create a new password 330 file).</p> 331 332 <p>Now, you need to modify your <code>.htaccess</code> file or 333 <code class="directive"><a href="/mod/core.html#directory"><Directory></a></code> 334 block to look like the following:</p> 335 336 <div class="example"><p><code> 337 AuthType Basic<br /> 338 AuthName "By Invitation Only"<br /> 339 # Optional line:<br /> 340 AuthBasicProvider file<br /> 341 AuthUserFile /usr/local/apache/passwd/passwords<br /> 342 AuthGroupFile /usr/local/apache/passwd/groups<br /> 343 Require group GroupName 344 </code></p></div> 345 346 <p>Now, anyone that is listed in the group <code>GroupName</code>, 347 and has an entry in the <code>password</code> file, will be let in, if 348 they type the correct password.</p> 349 350 <p>There's another way to let multiple users in that is less 351 specific. Rather than creating a group file, you can just use 352 the following directive:</p> 353 354 <div class="example"><p><code> 355 Require valid-user 356 </code></p></div> 357 358 <p>Using that rather than the <code>Require user rbowen</code> 359 line will allow anyone in that is listed in the password file, 360 and who correctly enters their password.</p> 361</div><div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div> 362<div class="section"> 363<h2><a name="possibleproblems" id="possibleproblems">Possible problems</a></h2> 364 <p>Because of the way that Basic authentication is specified, 365 your username and password must be verified every time you 366 request a document from the server. This is even if you're 367 reloading the same page, and for every image on the page (if 368 they come from a protected directory). As you can imagine, this 369 slows things down a little. The amount that it slows things 370 down is proportional to the size of the password file, because 371 it has to open up that file, and go down the list of users 372 until it gets to your name. And it has to do this every time a 373 page is loaded.</p> 374 375 <p>A consequence of this is that there's a practical limit to 376 how many users you can put in one password file. This limit 377 will vary depending on the performance of your particular 378 server machine, but you can expect to see slowdowns once you 379 get above a few hundred entries, and may wish to consider a 380 different authentication method at that time.</p> 381</div><div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div> 382<div class="section"> 383<h2><a name="dbmdbd" id="dbmdbd">Alternate password storage</a></h2> 384 385 <p>Because storing passwords in plain text files has the above 386 problems, you may wish to store your passwords somewhere else, such 387 as in a database.</p> 388 389 <p><code class="module"><a href="/mod/mod_authn_dbm.html">mod_authn_dbm</a></code> and <code class="module"><a href="/mod/mod_authn_dbd.html">mod_authn_dbd</a></code> are two 390 modules which make this possible. Rather than selecting <code><code class="directive"><a href="/mod/mod_auth_basic.html#authbasicprovider">AuthBasicProvider</a></code> file</code>, instead 391 you can choose <code>dbm</code> or <code>dbd</code> as your storage 392 format.</p> 393 394 <p>To select a dbd file rather than a text file, for example:</p> 395 396 <div class="example"><p><code> 397 <Directory /www/docs/private><br /> 398 <span class="indent"> 399 AuthName "Private"<br /> 400 AuthType Basic<br /> 401 AuthBasicProvider dbm<br /> 402 AuthDBMUserFile /www/passwords/passwd.dbm<br /> 403 Require valid-user<br /> 404 </span> 405</Directory> 406 </code></p></div> 407 408 <p>Other options are available. Consult the 409 <code class="module"><a href="/mod/mod_authn_dbm.html">mod_authn_dbm</a></code> documentation for more details.</p> 410 411</div><div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div> 412<div class="section"> 413<h2><a name="moreinformation" id="moreinformation">More information</a></h2> 414 <p>You should also read the documentation for 415 <code class="module"><a href="/mod/mod_auth_basic.html">mod_auth_basic</a></code> and <code class="module"><a href="/mod/mod_authz_host.html">mod_authz_host</a></code> which 416 contain some more information about how this all works. 417 <code class="module"><a href="/mod/mod_authn_alias.html">mod_authn_alias</a></code> can also help in simplifying certain 418 authentication configurations.</p> 419 420 <p>The various ciphers supported by Apache for authentication data are 421 explained in <a href="/misc/password_encryptions.html">Password 422 Encryptions</a>.</p> 423 424 <p>And you may want to look at the <a href="access.html">Access 425 Control</a> howto, which discusses a number of related topics.</p> 426 427</div></div> 428<div class="bottomlang"> 429<p><span>Available Languages: </span><a href="/en/howto/auth.html" title="English"> en </a> | 430<a href="/fr/howto/auth.html" hreflang="fr" rel="alternate" title="Fran�ais"> fr </a> | 431<a href="/ja/howto/auth.html" hreflang="ja" rel="alternate" title="Japanese"> ja </a> | 432<a href="/ko/howto/auth.html" hreflang="ko" rel="alternate" title="Korean"> ko </a> | 433<a href="/tr/howto/auth.html" hreflang="tr" rel="alternate" title="T�rk�e"> tr </a></p> 434</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> 435<script type="text/javascript"><!--//--><![CDATA[//><!-- 436var comments_shortname = 'httpd'; 437var comments_identifier = 'http://httpd.apache.org/docs/2.2/howto/auth.html'; 438(function(w, d) { 439 if (w.location.hostname.toLowerCase() == "httpd.apache.org") { 440 d.write('<div id="comments_thread"><\/div>'); 441 var s = d.createElement('script'); 442 s.type = 'text/javascript'; 443 s.async = true; 444 s.src = 'https://comments.apache.org/show_comments.lua?site=' + comments_shortname + '&page=' + comments_identifier; 445 (d.getElementsByTagName('head')[0] || d.getElementsByTagName('body')[0]).appendChild(s); 446 } 447 else { 448 d.write('<div id="comments_thread">Comments are disabled for this page at the moment.<\/div>'); 449 } 450})(window, document); 451//--><!]]></script></div><div id="footer"> 452<p class="apache">Copyright 2013 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> 453<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[//><!-- 454if (typeof(prettyPrint) !== 'undefined') { 455 prettyPrint(); 456} 457//--><!]]></script> 458</body></html>