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="&lt;-" alt="&lt;-" src="/images/left.gif" /></a></div>
21<div id="path">
22<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.2</a> &gt; <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">&nbsp;en&nbsp;</a> |
25<a href="/fr/howto/auth.html" hreflang="fr" rel="alternate" title="Fran�ais">&nbsp;fr&nbsp;</a> |
26<a href="/ja/howto/auth.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
27<a href="/ko/howto/auth.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a> |
28<a href="/tr/howto/auth.html" hreflang="tr" rel="alternate" title="T�rk�e">&nbsp;tr&nbsp;</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">&lt;Directory&gt;</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 &lt;Directory
204    /usr/local/apache/apache/htdocs/secret&gt; 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&lt;Directory /usr/local/apache/htdocs/sekrit&gt;<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&lt;/Directory&gt;
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">&lt;Directory&gt;</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    &lt;Directory /www/docs/private&gt;<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&lt;/Directory&gt;
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">&nbsp;en&nbsp;</a> |
430<a href="/fr/howto/auth.html" hreflang="fr" rel="alternate" title="Fran�ais">&nbsp;fr&nbsp;</a> |
431<a href="/ja/howto/auth.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
432<a href="/ko/howto/auth.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a> |
433<a href="/tr/howto/auth.html" hreflang="tr" rel="alternate" title="T�rk�e">&nbsp;tr&nbsp;</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&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>
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>