]> granicus.if.org Git - apache/blob - docs/manual/urlmapping.html.en
71da89d3696e8363797536040eefc3a2a1fbd09c
[apache] / docs / manual / urlmapping.html.en
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>Mapping URLs to Filesystem Locations - 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.5</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.5</a></div><div id="page-content"><div id="preamble"><h1>Mapping URLs to Filesystem Locations</h1>
23 <div class="toplang">
24 <p><span>Available Languages: </span><a href="./en/urlmapping.html" title="English">&nbsp;en&nbsp;</a> |
25 <a href="./fr/urlmapping.html" hreflang="fr" rel="alternate" title="Français">&nbsp;fr&nbsp;</a> |
26 <a href="./ja/urlmapping.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
27 <a href="./ko/urlmapping.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a> |
28 <a href="./tr/urlmapping.html" hreflang="tr" rel="alternate" title="Türkçe">&nbsp;tr&nbsp;</a></p>
29 </div>
30
31     <p>This document explains how the Apache HTTP Server uses the URL of a request
32     to determine the filesystem location from which to serve a
33     file.</p>
34   </div>
35 <div id="quickview"><ul id="toc"><li><img alt="" src="./images/down.gif" /> <a href="#related">Related Modules and Directives</a></li>
36 <li><img alt="" src="./images/down.gif" /> <a href="#documentroot">DocumentRoot</a></li>
37 <li><img alt="" src="./images/down.gif" /> <a href="#outside">Files Outside the DocumentRoot</a></li>
38 <li><img alt="" src="./images/down.gif" /> <a href="#user">User Directories</a></li>
39 <li><img alt="" src="./images/down.gif" /> <a href="#redirect">URL Redirection</a></li>
40 <li><img alt="" src="./images/down.gif" /> <a href="#proxy">Reverse Proxy</a></li>
41 <li><img alt="" src="./images/down.gif" /> <a href="#rewrite">Rewriting Engine</a></li>
42 <li><img alt="" src="./images/down.gif" /> <a href="#notfound">File Not Found</a></li>
43 <li><img alt="" src="./images/down.gif" /> <a href="#other">Other URL Mapping Modules</a></li>
44 </ul><ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div>
45 <div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
46 <div class="section">
47 <h2><a name="related" id="related">Related Modules and Directives</a></h2>
48
49 <table class="related"><tr><th>Related Modules</th><th>Related Directives</th></tr><tr><td><ul><li><code class="module"><a href="./mod/mod_actions.html">mod_actions</a></code></li><li><code class="module"><a href="./mod/mod_alias.html">mod_alias</a></code></li><li><code class="module"><a href="./mod/mod_dir.html">mod_dir</a></code></li><li><code class="module"><a href="./mod/mod_imagemap.html">mod_imagemap</a></code></li><li><code class="module"><a href="./mod/mod_negotiation.html">mod_negotiation</a></code></li><li><code class="module"><a href="./mod/mod_proxy.html">mod_proxy</a></code></li><li><code class="module"><a href="./mod/mod_rewrite.html">mod_rewrite</a></code></li><li><code class="module"><a href="./mod/mod_speling.html">mod_speling</a></code></li><li><code class="module"><a href="./mod/mod_userdir.html">mod_userdir</a></code></li><li><code class="module"><a href="./mod/mod_vhost_alias.html">mod_vhost_alias</a></code></li></ul></td><td><ul><li><code class="directive"><a href="./mod/mod_alias.html#alias">Alias</a></code></li><li><code class="directive"><a href="./mod/mod_alias.html#aliasmatch">AliasMatch</a></code></li><li><code class="directive"><a href="./mod/mod_speling.html#checkspelling">CheckSpelling</a></code></li><li><code class="directive"><a href="./mod/core.html#documentroot">DocumentRoot</a></code></li><li><code class="directive"><a href="./mod/core.html#errordocument">ErrorDocument</a></code></li><li><code class="directive"><a href="./mod/core.html#options">Options</a></code></li><li><code class="directive"><a href="./mod/mod_proxy.html#proxypass">ProxyPass</a></code></li><li><code class="directive"><a href="./mod/mod_proxy.html#proxypassreverse">ProxyPassReverse</a></code></li><li><code class="directive"><a href="./mod/mod_proxy.html#proxypassreversecookiedomain">ProxyPassReverseCookieDomain</a></code></li><li><code class="directive"><a href="./mod/mod_proxy.html#proxypassreversecookiepath">ProxyPassReverseCookiePath</a></code></li><li><code class="directive"><a href="./mod/mod_alias.html#redirect">Redirect</a></code></li><li><code class="directive"><a href="./mod/mod_alias.html#redirectmatch">RedirectMatch</a></code></li><li><code class="directive"><a href="./mod/mod_rewrite.html#rewritecond">RewriteCond</a></code></li><li><code class="directive"><a href="./mod/mod_rewrite.html#rewriterule">RewriteRule</a></code></li><li><code class="directive"><a href="./mod/mod_alias.html#scriptalias">ScriptAlias</a></code></li><li><code class="directive"><a href="./mod/mod_alias.html#scriptaliasmatch">ScriptAliasMatch</a></code></li><li><code class="directive"><a href="./mod/mod_userdir.html#userdir">UserDir</a></code></li></ul></td></tr></table>
50 </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
51 <div class="section">
52 <h2><a name="documentroot" id="documentroot">DocumentRoot</a></h2>
53
54     <p>In deciding what file to serve for a given request, httpd's
55     default behavior is to take the URL-Path for the request (the part
56     of the URL following the hostname and port) and add it to the end
57     of the <code class="directive"><a href="./mod/core.html#documentroot">DocumentRoot</a></code> specified
58     in your configuration files. Therefore, the files and directories
59     underneath the <code class="directive"><a href="./mod/core.html#documentroot">DocumentRoot</a></code>
60     make up the basic document tree which will be visible from the
61     web.</p>
62
63     <p>For example, if <code class="directive"><a href="./mod/core.html#documentroot">DocumentRoot</a></code>
64     were set to <code>/var/www/html</code> then a request for
65     <code>http://www.example.com/fish/guppies.html</code> would result
66     in the file <code>/var/www/html/fish/guppies.html</code> being
67     served to the requesting client.</p>
68
69     <p>httpd is also capable of <a href="vhosts/">Virtual
70     Hosting</a>, where the server receives requests for more than one
71     host. In this case, a different <code class="directive"><a href="./mod/core.html#documentroot">DocumentRoot</a></code> can be specified for each
72     virtual host, or alternatively, the directives provided by the
73     module <code class="module"><a href="./mod/mod_vhost_alias.html">mod_vhost_alias</a></code> can
74     be used to dynamically determine the appropriate place from which
75     to serve content based on the requested IP address or
76     hostname.</p>
77
78     <p>The <code class="directive"><a href="./mod/core.html#documentroot">DocumentRoot</a></code> directive
79     is set in your main server configuration file
80     (<code>httpd.conf</code>) and, possibly, once per additional <a href="vhosts/">Virtual Host</a> you create.</p>
81 </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
82 <div class="section">
83 <h2><a name="outside" id="outside">Files Outside the DocumentRoot</a></h2>
84
85     <p>There are frequently circumstances where it is necessary to
86     allow web access to parts of the filesystem that are not strictly
87     underneath the <code class="directive"><a href="./mod/core.html#documentroot">DocumentRoot</a></code>. httpd offers several
88     different ways to accomplish this. On Unix systems, symbolic links
89     can bring other parts of the filesystem under the <code class="directive"><a href="./mod/core.html#documentroot">DocumentRoot</a></code>. For security reasons,
90     httpd will follow symbolic links only if the <code class="directive"><a href="./mod/core.html#options">Options</a></code> setting for the relevant
91     directory includes <code>FollowSymLinks</code> or
92     <code>SymLinksIfOwnerMatch</code>.</p>
93
94     <p>Alternatively, the <code class="directive"><a href="./mod/mod_alias.html#alias">Alias</a></code> directive will map any part
95     of the filesystem into the web space. For example, with</p>
96
97 <pre class="prettyprint lang-config">Alias /docs /var/web</pre>
98
99
100     <p>the URL <code>http://www.example.com/docs/dir/file.html</code>
101     will be served from <code>/var/web/dir/file.html</code>. The
102     <code class="directive"><a href="./mod/mod_alias.html#scriptalias">ScriptAlias</a></code> directive
103     works the same way, with the additional effect that all content
104     located at the target path is treated as <a class="glossarylink" href="./glossary.html#cgi" title="see glossary">CGI</a> scripts.</p>
105
106     <p>For situations where you require additional flexibility, you
107     can use the <code class="directive"><a href="./mod/mod_alias.html#aliasmatch">AliasMatch</a></code>
108     and <code class="directive"><a href="./mod/mod_alias.html#scriptaliasmatch">ScriptAliasMatch</a></code>
109     directives to do powerful <a class="glossarylink" href="./glossary.html#regex" title="see glossary">regular
110     expression</a> based matching and substitution. For
111     example,</p>
112
113     <pre class="prettyprint lang-config">
114     ScriptAliasMatch ^/~([a-zA-Z0-9]+)/cgi-bin/(.+)   /home/$1/cgi-bin/$2
115     </pre>
116
117
118     <p>will map a request to
119     <code>http://example.com/~user/cgi-bin/script.cgi</code> to the
120     path <code>/home/user/cgi-bin/script.cgi</code> and will treat
121     the resulting file as a CGI script.</p>
122 </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
123 <div class="section">
124 <h2><a name="user" id="user">User Directories</a></h2>
125
126     <p>Traditionally on Unix systems, the home directory of a
127     particular <em>user</em> can be referred to as
128     <code>~user/</code>. The module <code class="module"><a href="./mod/mod_userdir.html">mod_userdir</a></code>
129     extends this idea to the web by allowing files under each user's
130     home directory to be accessed using URLs such as the
131     following.</p>
132
133 <div class="example"><p><code>http://www.example.com/~user/file.html</code></p></div>
134
135     <p>For security reasons, it is inappropriate to give direct
136     access to a user's home directory from the web. Therefore, the
137     <code class="directive"><a href="./mod/mod_userdir.html#userdir">UserDir</a></code> directive
138     specifies a directory underneath the user's home directory
139     where web files are located. Using the default setting of
140     <code>Userdir public_html</code>, the above URL maps to a file
141     at a directory like
142     <code>/home/user/public_html/file.html</code> where
143     <code>/home/user/</code> is the user's home directory as
144     specified in <code>/etc/passwd</code>.</p>
145
146     <p>There are also several other forms of the
147     <code>Userdir</code> directive which you can use on systems
148     where <code>/etc/passwd</code> does not contain the location of
149     the home directory.</p>
150
151     <p>Some people find the "~" symbol (which is often encoded on the
152     web as <code>%7e</code>) to be awkward and prefer to use an
153     alternate string to represent user directories. This functionality
154     is not supported by mod_userdir. However, if users' home
155     directories are structured in a regular way, then it is possible
156     to use the <code class="directive"><a href="./mod/mod_alias.html#aliasmatch">AliasMatch</a></code>
157     directive to achieve the desired effect. For example, to make
158     <code>http://www.example.com/upages/user/file.html</code> map to
159     <code>/home/user/public_html/file.html</code>, use the following
160     <code>AliasMatch</code> directive:</p>
161
162     <pre class="prettyprint lang-config">
163     AliasMatch ^/upages/([a-zA-Z0-9]+)(/(.*))?$   /home/$1/public_html/$3
164     </pre>
165
166 </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
167 <div class="section">
168 <h2><a name="redirect" id="redirect">URL Redirection</a></h2>
169
170     <p>The configuration directives discussed in the above sections
171     tell httpd to get content from a specific place in the filesystem
172     and return it to the client. Sometimes, it is desirable instead to
173     inform the client that the requested content is located at a
174     different URL, and instruct the client to make a new request with
175     the new URL. This is called <em>redirection</em> and is
176     implemented by the <code class="directive"><a href="./mod/mod_alias.html#redirect">Redirect</a></code> directive. For example, if
177     the contents of the directory <code>/foo/</code> under the
178     <code class="directive"><a href="./mod/core.html#documentroot">DocumentRoot</a></code> are moved
179     to the new directory <code>/bar/</code>, you can instruct clients
180     to request the content at the new location as follows:</p>
181
182     <pre class="prettyprint lang-config">
183     Redirect permanent /foo/   http://www.example.com/bar/
184     </pre>
185
186
187     <p>This will redirect any URL-Path starting in
188     <code>/foo/</code> to the same URL path on the
189     <code>www.example.com</code> server with <code>/bar/</code>
190     substituted for <code>/foo/</code>. You can redirect clients to
191     any server, not only the origin server.</p>
192
193     <p>httpd also provides a <code class="directive"><a href="./mod/mod_alias.html#redirectmatch">RedirectMatch</a></code> directive for more
194     complicated rewriting problems. For example, to redirect requests
195     for the site home page to a different site, but leave all other
196     requests alone, use the following configuration:</p>
197
198     <pre class="prettyprint lang-config">
199     RedirectMatch permanent ^/$    http://www.example.com/startpage.html
200     </pre>
201
202
203     <p>Alternatively, to temporarily redirect all pages on one site
204     to a particular page on another site, use the following:</p>
205
206     <pre class="prettyprint lang-config">
207     RedirectMatch temp .*  http://othersite.example.com/startpage.html
208     </pre>
209
210 </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
211 <div class="section">
212 <h2><a name="proxy" id="proxy">Reverse Proxy</a></h2>
213
214 <p>httpd also allows you to bring remote documents into the URL space
215 of the local server.  This technique is called <em>reverse
216 proxying</em> because the web server acts like a proxy server by
217 fetching the documents from a remote server and returning them to the
218 client.  It is different from normal (forward) proxying because, to the client,
219 it appears the documents originate at the reverse proxy server.</p>
220
221 <p>In the following example, when clients request documents under the
222 <code>/foo/</code> directory, the server fetches those documents from
223 the <code>/bar/</code> directory on <code>internal.example.com</code>
224 and returns them to the client as if they were from the local
225 server.</p>
226
227 <pre class="prettyprint lang-config">
228 ProxyPass /foo/ http://internal.example.com/bar/<br />
229 ProxyPassReverse /foo/ http://internal.example.com/bar/<br />
230 ProxyPassReverseCookieDomain internal.example.com public.example.com<br />
231 ProxyPassReverseCookiePath /foo/ /bar/
232 </pre>
233
234
235 <p>The <code class="directive"><a href="./mod/mod_proxy.html#proxypass">ProxyPass</a></code> configures
236 the server to fetch the appropriate documents, while the
237 <code class="directive"><a href="./mod/mod_proxy.html#proxypassreverse">ProxyPassReverse</a></code>
238 directive rewrites redirects originating at
239 <code>internal.example.com</code> so that they target the appropriate
240 directory on the local server.  Similarly, the
241 <code class="directive"><a href="./mod/mod_proxy.html#proxypassreversecookiedomain">ProxyPassReverseCookieDomain</a></code>
242 and <code class="directive"><a href="./mod/mod_proxy.html#proxypassreversecookiepath">ProxyPassReverseCookiePath</a></code>
243 rewrite cookies set by the backend server.</p>
244 <p>It is important to note, however, that
245 links inside the documents will not be rewritten. So any absolute
246 links on <code>internal.example.com</code> will result in the client
247 breaking out of the proxy server and requesting directly from
248 <code>internal.example.com</code>. You can modify these links (and other
249 content) in a page as it is being served to the client using
250 <code class="module"><a href="./mod/mod_substitute.html">mod_substitute</a></code>.</p>
251
252 <pre class="prettyprint lang-config">
253 Substitute s/internal\.example\.com/www.example.com/i
254 </pre>
255
256
257 <p>For more sophisticated rewriting of links in HTML and XHTML, the 
258 <code class="module"><a href="./mod/mod_proxy_html.html">mod_proxy_html</a></code> module is also available. It allows you
259 to create maps of URLs that need to be rewritten, so that complex
260 proxying scenarios can be handled.</p>
261 </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
262 <div class="section">
263 <h2><a name="rewrite" id="rewrite">Rewriting Engine</a></h2>
264
265     <p>When even more powerful substitution is required, the rewriting
266     engine provided by <code class="module"><a href="./mod/mod_rewrite.html">mod_rewrite</a></code>
267     can be useful. The directives provided by this module can use
268     characteristics of the request such as browser type or source IP
269     address in deciding from where to serve content. In addition,
270     mod_rewrite can use external database files or programs to
271     determine how to handle a request. The rewriting engine is capable
272     of performing all three types of mappings discussed above:
273     internal redirects (aliases), external redirects, and proxying.
274     Many practical examples employing mod_rewrite are discussed in the
275     <a href="rewrite/">detailed mod_rewrite documentation</a>.</p>
276 </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
277 <div class="section">
278 <h2><a name="notfound" id="notfound">File Not Found</a></h2>
279
280     <p>Inevitably, URLs will be requested for which no matching
281     file can be found in the filesystem. This can happen for
282     several reasons. In some cases, it can be a result of moving
283     documents from one location to another. In this case, it is
284     best to use <a href="#redirect">URL redirection</a> to inform
285     clients of the new location of the resource. In this way, you
286     can assure that old bookmarks and links will continue to work,
287     even though the resource is at a new location.</p>
288
289     <p>Another common cause of "File Not Found" errors is
290     accidental mistyping of URLs, either directly in the browser,
291     or in HTML links. httpd provides the module
292     <code class="module"><a href="./mod/mod_speling.html">mod_speling</a></code> (sic) to help with
293     this problem. When this module is activated, it will intercept
294     "File Not Found" errors and look for a resource with a similar
295     filename. If one such file is found, mod_speling will send an
296     HTTP redirect to the client informing it of the correct
297     location. If several "close" files are found, a list of
298     available alternatives will be presented to the client.</p>
299
300     <p>An especially useful feature of mod_speling, is that it will
301     compare filenames without respect to case. This can help
302     systems where users are unaware of the case-sensitive nature of
303     URLs and the unix filesystem. But using mod_speling for
304     anything more than the occasional URL correction can place
305     additional load on the server, since each "incorrect" request
306     is followed by a URL redirection and a new request from the
307     client.</p>
308
309     <p><code class="module"><a href="./mod/mod_dir.html">mod_dir</a></code> provides <code class="directive"><a href="./mod/mod_dir.html#fallbackresource">FallbackResource</a></code>, which can be used to map virtual
310     URIs to a real resource, which then serves them. This is a very
311     useful replace to <code class="module"><a href="./mod/mod_rewrite.html">mod_rewrite</a></code> when implementing
312     a 'front controler'</p>
313
314     <p>If all attempts to locate the content fail, httpd returns
315     an error page with HTTP status code 404 (file not found). The
316     appearance of this page is controlled with the
317     <code class="directive"><a href="./mod/core.html#errordocument">ErrorDocument</a></code> directive
318     and can be customized in a flexible manner as discussed in the
319     <a href="custom-error.html">Custom error responses</a>
320     document.</p>
321 </div><div class="top"><a href="#page-header"><img alt="top" src="./images/up.gif" /></a></div>
322 <div class="section">
323 <h2><a name="other" id="other">Other URL Mapping Modules</a></h2>
324
325
326
327     <p>Other modules available for URL mapping include:</p>
328
329     <ul>
330     <li><code class="module"><a href="./mod/mod_actions.html">mod_actions</a></code> - Maps a request to a CGI script
331     based on the request method, or resource MIME type.</li>
332     <li><code class="module"><a href="./mod/mod_dir.html">mod_dir</a></code> - Provides basic mapping of a trailing
333     slash into an index file such as <code>index.html</code>.</li>
334     <li><code class="module"><a href="./mod/mod_imagemap.html">mod_imagemap</a></code> - Maps a request to a URL based
335     on where a user clicks on an image embedded in a HTML document.</li>
336     <li><code class="module"><a href="./mod/mod_negotiation.html">mod_negotiation</a></code> - Selects an appropriate
337     document based on client preferences such as language or content
338     compression.</li>
339     </ul>
340
341 </div></div>
342 <div class="bottomlang">
343 <p><span>Available Languages: </span><a href="./en/urlmapping.html" title="English">&nbsp;en&nbsp;</a> |
344 <a href="./fr/urlmapping.html" hreflang="fr" rel="alternate" title="Français">&nbsp;fr&nbsp;</a> |
345 <a href="./ja/urlmapping.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
346 <a href="./ko/urlmapping.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a> |
347 <a href="./tr/urlmapping.html" hreflang="tr" rel="alternate" title="Türkçe">&nbsp;tr&nbsp;</a></p>
348 </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>
349 <script type="text/javascript"><!--//--><![CDATA[//><!--
350 var comments_shortname = 'httpd';
351 var comments_identifier = 'http://httpd.apache.org/docs/2.4/urlmapping.html.en';
352 (function(w, d) {
353     var disabled = false;
354     if (w.location.hostname.toLowerCase() == "httpd.apache.org" && disabled !== true) {
355         d.write('<div id="comments_thread"><\/div>');
356         var s = d.createElement('script');
357         s.type = 'text/javascript';
358         s.async = true;
359         s.src = 'http://c.apaste.info/show_comments.lua?site=' + comments_shortname + '&page=' + comments_identifier;
360         (d.getElementsByTagName('head')[0] || d.getElementsByTagName('body')[0]).appendChild(s);
361     }
362     else {
363         d.write('<div id="comments_thread">Comments are disabled for this page at the moment.<\/div>');
364     }
365 })(window, document);
366 //--><!]]></script></div><div id="footer">
367 <p class="apache">Copyright 2012 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>
368 <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[//><!--
369 if (typeof(prettyPrint) !== 'undefined') {
370     prettyPrint();
371 }
372 //--><!]]></script>
373 </body></html>