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>Apache httpd Tutorial: Introduction to Server Side Includes - 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 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.4</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.4</a> &gt; <a href="./">How-To / Tutorials</a></div><div id="page-content"><div id="preamble"><h1>Apache httpd Tutorial: Introduction to Server Side Includes</h1>
23<div class="toplang">
24<p><span>Available Languages: </span><a href="/en/howto/ssi.html" title="English">&nbsp;en&nbsp;</a> |
25<a href="/fr/howto/ssi.html" hreflang="fr" rel="alternate" title="Fran�ais">&nbsp;fr&nbsp;</a> |
26<a href="/ja/howto/ssi.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
27<a href="/ko/howto/ssi.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
28</div>
29
30<p>Server-side includes provide a means to add dynamic content to
31existing HTML documents.</p>
32</div>
33<div id="quickview"><ul id="toc"><li><img alt="" src="/images/down.gif" /> <a href="#related">Introduction</a></li>
34<li><img alt="" src="/images/down.gif" /> <a href="#what">What are SSI?</a></li>
35<li><img alt="" src="/images/down.gif" /> <a href="#configuring">Configuring your server to permit SSI</a></li>
36<li><img alt="" src="/images/down.gif" /> <a href="#basic">Basic SSI directives</a></li>
37<li><img alt="" src="/images/down.gif" /> <a href="#additionalexamples">Additional examples</a></li>
38<li><img alt="" src="/images/down.gif" /> <a href="#config">What else can I config?</a></li>
39<li><img alt="" src="/images/down.gif" /> <a href="#exec">Executing commands</a></li>
40<li><img alt="" src="/images/down.gif" /> <a href="#advanced">Advanced SSI techniques</a></li>
41<li><img alt="" src="/images/down.gif" /> <a href="#conclusion">Conclusion</a></li>
42</ul><ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div>
43<div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
44<div class="section">
45<h2><a name="related" id="related">Introduction</a></h2>
46 <table class="related"><tr><th>Related Modules</th><th>Related Directives</th></tr><tr><td><ul><li><code class="module"><a href="/mod/mod_include.html">mod_include</a></code></li><li><code class="module"><a href="/mod/mod_cgi.html">mod_cgi</a></code></li><li><code class="module"><a href="/mod/mod_expires.html">mod_expires</a></code></li></ul></td><td><ul><li><code class="directive"><a href="/mod/core.html#options">Options</a></code></li><li><code class="directive"><a href="/mod/mod_include.html#xbithack">XBitHack</a></code></li><li><code class="directive"><a href="/mod/mod_mime.html#addtype">AddType</a></code></li><li><code class="directive"><a href="/mod/core.html#setoutputfilter">SetOutputFilter</a></code></li><li><code class="directive"><a href="/mod/mod_setenvif.html#browsermatchnocase">BrowserMatchNoCase</a></code></li></ul></td></tr></table>
47
48    <p>This article deals with Server Side Includes, usually called
49    simply SSI. In this article, I'll talk about configuring your
50    server to permit SSI, and introduce some basic SSI techniques
51    for adding dynamic content to your existing HTML pages.</p>
52
53    <p>In the latter part of the article, we'll talk about some of
54    the somewhat more advanced things that can be done with SSI,
55    such as conditional statements in your SSI directives.</p>
56
57</div><div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
58<div class="section">
59<h2><a name="what" id="what">What are SSI?</a></h2>
60
61    <p>SSI (Server Side Includes) are directives that are placed in
62    HTML pages, and evaluated on the server while the pages are
63    being served. They let you add dynamically generated content to
64    an existing HTML page, without having to serve the entire page
65    via a CGI program, or other dynamic technology.</p>
66
67    <p>For example, you might place a directive into an existing HTML
68    page, such as:</p>
69
70    <div class="example"><p><code>
71    &lt;!--#echo var="DATE_LOCAL" --&gt;
72    </code></p></div>
73
74    <p>And, when the page is served, this fragment will be evaluated and replaced with its value:</p>
75
76    <div class="example"><p><code>
77    Tuesday, 15-Jan-2013 19:28:54 EST
78    </code></p></div>
79
80    <p>The decision of when to use SSI, and when to have your page
81    entirely generated by some program, is usually a matter of how
82    much of the page is static, and how much needs to be
83    recalculated every time the page is served. SSI is a great way
84    to add small pieces of information, such as the current time - shown
85    above.  But if a majority of your page is being generated at the time
86    that it is served, you need to look for some other solution.</p>
87</div><div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
88<div class="section">
89<h2><a name="configuring" id="configuring">Configuring your server to permit SSI</a></h2>
90
91
92    <p>To permit SSI on your server, you must have the following
93    directive either in your <code>httpd.conf</code> file, or in a
94    <code>.htaccess</code> file:</p>
95<pre class="prettyprint lang-config">Options +Includes</pre>
96
97
98    <p>This tells Apache that you want to permit files to be parsed
99    for SSI directives.  Note that most configurations contain
100    multiple <code class="directive"><a href="/mod/core.html#options">Options</a></code> directives
101    that can override each other.  You will probably need to apply the
102    <code>Options</code> to the specific directory where you want SSI
103    enabled in order to assure that it gets evaluated last.</p>
104
105    <p>Not just any file is parsed for SSI directives. You have to
106    tell Apache which files should be parsed. There are two ways to
107    do this. You can tell Apache to parse any file with a
108    particular file extension, such as <code>.shtml</code>, with
109    the following directives:</p>
110<pre class="prettyprint lang-config">        AddType text/html .shtml<br />
111        AddOutputFilter INCLUDES .shtml</pre>
112
113
114    <p>One disadvantage to this approach is that if you wanted to
115    add SSI directives to an existing page, you would have to
116    change the name of that page, and all links to that page, in
117    order to give it a <code>.shtml</code> extension, so that those
118    directives would be executed.</p>
119
120    <p>The other method is to use the <code class="directive"><a href="/mod/mod_include.html#xbithack">XBitHack</a></code> directive:</p>
121<pre class="prettyprint lang-config">XBitHack on</pre>
122
123
124    <p><code class="directive"><a href="/mod/mod_include.html#xbithack">XBitHack</a></code>
125    tells Apache to parse files for SSI
126    directives if they have the execute bit set. So, to add SSI
127    directives to an existing page, rather than having to change
128    the file name, you would just need to make the file executable
129    using <code>chmod</code>.</p>
130<div class="example"><p><code>
131        chmod +x pagename.html
132</code></p></div>
133
134    <p>A brief comment about what not to do. You'll occasionally
135    see people recommending that you just tell Apache to parse all
136    <code>.html</code> files for SSI, so that you don't have to
137    mess with <code>.shtml</code> file names. These folks have
138    perhaps not heard about <code class="directive"><a href="/mod/mod_include.html#xbithack">XBitHack</a></code>. The thing to
139    keep in mind is that, by doing this, you're requiring that
140    Apache read through every single file that it sends out to
141    clients, even if they don't contain any SSI directives. This
142    can slow things down quite a bit, and is not a good idea.</p>
143
144    <p>Of course, on Windows, there is no such thing as an execute
145    bit to set, so that limits your options a little.</p>
146
147    <p>In its default configuration, Apache does not send the last
148    modified date or content length HTTP headers on SSI pages,
149    because these values are difficult to calculate for dynamic
150    content. This can prevent your document from being cached, and
151    result in slower perceived client performance. There are two
152    ways to solve this:</p>
153
154    <ol>
155      <li>Use the <code>XBitHack Full</code> configuration. This
156      tells Apache to determine the last modified date by looking
157      only at the date of the originally requested file, ignoring
158      the modification date of any included files.</li>
159
160      <li>Use the directives provided by
161      <code class="module"><a href="/mod/mod_expires.html">mod_expires</a></code> to set an explicit expiration
162      time on your files, thereby letting browsers and proxies
163      know that it is acceptable to cache them.</li>
164    </ol>
165</div><div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
166<div class="section">
167<h2><a name="basic" id="basic">Basic SSI directives</a></h2>
168
169    <p>SSI directives have the following syntax:</p>
170<div class="example"><p><code>
171        &lt;!--#function attribute=value attribute=value ... --&gt;
172</code></p></div>
173
174    <p>It is formatted like an HTML comment, so if you don't have
175    SSI correctly enabled, the browser will ignore it, but it will
176    still be visible in the HTML source. If you have SSI correctly
177    configured, the directive will be replaced with its
178    results.</p>
179
180    <p>The function can be one of a number of things, and we'll talk
181    some more about most of these in the next installment of this
182    series. For now, here are some examples of what you can do with
183    SSI</p>
184
185<h3><a name="todaysdate" id="todaysdate">Today's date</a></h3>
186
187<div class="example"><p><code>
188        &lt;!--#echo var="DATE_LOCAL" --&gt;
189</code></p></div>
190
191    <p>The <code>echo</code> function just spits out the value of a
192    variable. There are a number of standard variables, which
193    include the whole set of environment variables that are
194    available to CGI programs. Also, you can define your own
195    variables with the <code>set</code> function.</p>
196
197    <p>If you don't like the format in which the date gets printed,
198    you can use the <code>config</code> function, with a
199    <code>timefmt</code> attribute, to modify that formatting.</p>
200
201<div class="example"><p><code>
202        &lt;!--#config timefmt="%A %B %d, %Y" --&gt;<br />
203        Today is &lt;!--#echo var="DATE_LOCAL" --&gt;
204</code></p></div>
205
206
207<h3><a name="lastmodified" id="lastmodified">Modification date of the file</a></h3>
208
209<div class="example"><p><code>
210        This document last modified &lt;!--#flastmod file="index.html" --&gt;
211</code></p></div>
212
213    <p>This function is also subject to <code>timefmt</code> format
214    configurations.</p>
215
216
217<h3><a name="cgi" id="cgi">Including the results of a CGI program</a></h3>
218
219    <p>This is one of the more common uses of SSI - to output the
220    results of a CGI program, such as everybody's favorite, a ``hit
221    counter.''</p>
222
223<div class="example"><p><code>
224        &lt;!--#include virtual="/cgi-bin/counter.pl" --&gt;
225</code></p></div>
226
227
228</div><div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
229<div class="section">
230<h2><a name="additionalexamples" id="additionalexamples">Additional examples</a></h2>
231
232
233    <p>Following are some specific examples of things you can do in
234    your HTML documents with SSI.</p>
235
236<h3><a name="docmodified" id="docmodified">When was this document
237modified?</a></h3>
238
239    <p>Earlier, we mentioned that you could use SSI to inform the
240    user when the document was most recently modified. However, the
241    actual method for doing that was left somewhat in question. The
242    following code, placed in your HTML document, will put such a
243    time stamp on your page. Of course, you will have to have SSI
244    correctly enabled, as discussed above.</p>
245<div class="example"><p><code>
246        &lt;!--#config timefmt="%A %B %d, %Y" --&gt;<br />
247        This file last modified &lt;!--#flastmod file="ssi.shtml" --&gt;
248</code></p></div>
249
250    <p>Of course, you will need to replace the
251    <code>ssi.shtml</code> with the actual name of the file that
252    you're referring to. This can be inconvenient if you're just
253    looking for a generic piece of code that you can paste into any
254    file, so you probably want to use the
255    <code>LAST_MODIFIED</code> variable instead:</p>
256<div class="example"><p><code>
257        &lt;!--#config timefmt="%D" --&gt;<br />
258        This file last modified &lt;!--#echo var="LAST_MODIFIED" --&gt;
259</code></p></div>
260
261    <p>For more details on the <code>timefmt</code> format, go to
262    your favorite search site and look for <code>strftime</code>. The
263    syntax is the same.</p>
264
265
266<h3><a name="standard-footer" id="standard-footer">Including a standard footer</a></h3>
267
268
269    <p>If you are managing any site that is more than a few pages,
270    you may find that making changes to all those pages can be a
271    real pain, particularly if you are trying to maintain some kind
272    of standard look across all those pages.</p>
273
274    <p>Using an include file for a header and/or a footer can
275    reduce the burden of these updates. You just have to make one
276    footer file, and then include it into each page with the
277    <code>include</code> SSI command. The <code>include</code>
278    function can determine what file to include with either the
279    <code>file</code> attribute, or the <code>virtual</code>
280    attribute. The <code>file</code> attribute is a file path,
281    <em>relative to the current directory</em>. That means that it
282    cannot be an absolute file path (starting with /), nor can it
283    contain ../ as part of that path. The <code>virtual</code>
284    attribute is probably more useful, and should specify a URL
285    relative to the document being served. It can start with a /,
286    but must be on the same server as the file being served.</p>
287<div class="example"><p><code>
288        &lt;!--#include virtual="/footer.html" --&gt;
289</code></p></div>
290
291    <p>I'll frequently combine the last two things, putting a
292    <code>LAST_MODIFIED</code> directive inside a footer file to be
293    included. SSI directives can be contained in the included file,
294    and includes can be nested - that is, the included file can
295    include another file, and so on.</p>
296
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="config" id="config">What else can I config?</a></h2>
301
302
303    <p>In addition to being able to <code>config</code> the time
304    format, you can also <code>config</code> two other things.</p>
305
306    <p>Usually, when something goes wrong with your SSI directive,
307    you get the message</p>
308<div class="example"><p><code>
309        [an error occurred while processing this directive]
310</code></p></div>
311
312    <p>If you want to change that message to something else, you
313    can do so with the <code>errmsg</code> attribute to the
314    <code>config</code> function:</p>
315<div class="example"><p><code>
316        &lt;!--#config errmsg="[It appears that you don't know how to use SSI]" --&gt;
317</code></p></div>
318
319    <p>Hopefully, end users will never see this message, because
320    you will have resolved all the problems with your SSI
321    directives before your site goes live. (Right?)</p>
322
323    <p>And you can <code>config</code> the format in which file
324    sizes are returned with the <code>sizefmt</code> attribute. You
325    can specify <code>bytes</code> for a full count in bytes, or
326    <code>abbrev</code> for an abbreviated number in Kb or Mb, as
327    appropriate.</p>
328    </div><div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
329<div class="section">
330<h2><a name="exec" id="exec">Executing commands</a></h2>
331    
332
333    <p>I expect that I'll have an article some time in the coming
334    months about using SSI with small CGI programs. For now, here's
335    something else that you can do with the <code>exec</code>
336    function. You can actually have SSI execute a command using the
337    shell (<code>/bin/sh</code>, to be precise - or the DOS shell,
338    if you're on Win32). The following, for example, will give you
339    a directory listing.</p>
340<div class="example"><p><code>
341        &lt;pre&gt;<br />
342        &lt;!--#exec cmd="ls" --&gt;<br />
343        &lt;/pre&gt;
344</code></p></div>
345
346    <p>or, on Windows</p>
347<div class="example"><p><code>
348        &lt;pre&gt;<br />
349        &lt;!--#exec cmd="dir" --&gt;<br />
350        &lt;/pre&gt;
351</code></p></div>
352
353    <p>You might notice some strange formatting with this directive
354    on Windows, because the output from <code>dir</code> contains
355    the string ``&lt;<code>dir</code>&gt;'' in it, which confuses
356    browsers.</p>
357
358    <p>Note that this feature is exceedingly dangerous, as it will
359    execute whatever code happens to be embedded in the
360    <code>exec</code> tag. If you have any situation where users
361    can edit content on your web pages, such as with a
362    ``guestbook'', for example, make sure that you have this
363    feature disabled. You can allow SSI, but not the
364    <code>exec</code> feature, with the <code>IncludesNOEXEC</code>
365    argument to the <code>Options</code> directive.</p>
366    </div><div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
367<div class="section">
368<h2><a name="advanced" id="advanced">Advanced SSI techniques</a></h2>
369
370
371    <p>In addition to spitting out content, Apache SSI gives you
372    the option of setting variables, and using those variables in
373    comparisons and conditionals.</p>
374
375<h3><a name="variables" id="variables">Setting variables</a></h3>
376
377    <p>Using the <code>set</code> directive, you can set variables
378    for later use. We'll need this later in the discussion, so
379    we'll talk about it here. The syntax of this is as follows:</p>
380<div class="example"><p><code>
381        &lt;!--#set var="name" value="Rich" --&gt;
382</code></p></div>
383
384    <p>In addition to merely setting values literally like that, you
385    can use any other variable, including <a href="/env.html">environment variables</a> or the variables
386    discussed above (like <code>LAST_MODIFIED</code>, for example) to
387    give values to your variables. You will specify that something is
388    a variable, rather than a literal string, by using the dollar sign
389    ($) before the name of the variable.</p>
390
391    <div class="example"><p><code> &lt;!--#set var="modified" value="$LAST_MODIFIED" --&gt;
392    </code></p></div>
393
394    <p>To put a literal dollar sign into the value of your
395    variable, you need to escape the dollar sign with a
396    backslash.</p>
397<div class="example"><p><code>
398        &lt;!--#set var="cost" value="\$100" --&gt;
399</code></p></div>
400
401    <p>Finally, if you want to put a variable in the midst of a
402    longer string, and there's a chance that the name of the
403    variable will run up against some other characters, and thus be
404    confused with those characters, you can place the name of the
405    variable in braces, to remove this confusion. (It's hard to
406    come up with a really good example of this, but hopefully
407    you'll get the point.)</p>
408<div class="example"><p><code>
409        &lt;!--#set var="date" value="${DATE_LOCAL}_${DATE_GMT}" --&gt;
410</code></p></div>
411
412
413<h3><a name="conditional" id="conditional">Conditional expressions</a></h3>
414
415
416    <p>Now that we have variables, and are able to set and compare
417    their values, we can use them to express conditionals. This
418    lets SSI be a tiny programming language of sorts.
419    <code class="module"><a href="/mod/mod_include.html">mod_include</a></code> provides an <code>if</code>,
420    <code>elif</code>, <code>else</code>, <code>endif</code>
421    structure for building conditional statements. This allows you
422    to effectively generate multiple logical pages out of one
423    actual page.</p>
424
425    <p>The structure of this conditional construct is:</p>
426<div class="example"><p><code>
427    &lt;!--#if expr="test_condition" --&gt;<br />
428    &lt;!--#elif expr="test_condition" --&gt;<br />
429    &lt;!--#else --&gt;<br />
430    &lt;!--#endif --&gt;
431</code></p></div>
432
433    <p>A <em>test_condition</em> can be any sort of logical
434    comparison - either comparing values to one another, or testing
435    the ``truth'' of a particular value. (A given string is true if
436    it is nonempty.) For a full list of the comparison operators
437    available to you, see the <code class="module"><a href="/mod/mod_include.html">mod_include</a></code>
438    documentation. Here are some examples of how one might use this
439    construct.</p>
440
441    <p>In your configuration file, you could put the following
442    line:</p>
443<pre class="prettyprint lang-config">        BrowserMatchNoCase macintosh Mac<br />
444        BrowserMatchNoCase MSIE InternetExplorer</pre>
445
446
447    <p>This will set environment variables ``Mac'' and
448    ``InternetExplorer'' to true, if the client is running Internet
449    Explorer on a Macintosh.</p>
450
451    <p>Then, in your SSI-enabled document, you might do the
452    following:</p>
453<div class="example"><p><code>
454        &lt;!--#if expr="-T reqenv('Mac') &amp;&amp;
455                         -T reqenv('InternetExplorer')" --&gt;<br />
456        Apologetic text goes here<br />
457        &lt;!--#else --&gt;<br />
458        Cool JavaScript code goes here<br />
459        &lt;!--#endif --&gt;
460</code></p></div>
461
462    <p>Any other variable (either ones that you define, or normal
463    environment variables) can be used in conditional statements.
464    With Apache's ability to set environment variables with the
465    <code>SetEnvIf</code> directives, and other related directives,
466    this functionality can let you do some pretty involved dynamic
467    stuff without ever resorting to CGI.</p>
468
469</div><div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div>
470<div class="section">
471<h2><a name="conclusion" id="conclusion">Conclusion</a></h2>
472
473    <p>SSI is certainly not a replacement for CGI, or other
474    technologies used for generating dynamic web pages. But it is a
475    great way to add small amounts of dynamic content to pages,
476    without doing a lot of extra work.</p>
477</div></div>
478<div class="bottomlang">
479<p><span>Available Languages: </span><a href="/en/howto/ssi.html" title="English">&nbsp;en&nbsp;</a> |
480<a href="/fr/howto/ssi.html" hreflang="fr" rel="alternate" title="Fran�ais">&nbsp;fr&nbsp;</a> |
481<a href="/ja/howto/ssi.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a> |
482<a href="/ko/howto/ssi.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a></p>
483</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>
484<script type="text/javascript"><!--//--><![CDATA[//><!--
485var comments_shortname = 'httpd';
486var comments_identifier = 'http://httpd.apache.org/docs/2.4/howto/ssi.html';
487(function(w, d) {
488    if (w.location.hostname.toLowerCase() == "httpd.apache.org") {
489        d.write('<div id="comments_thread"><\/div>');
490        var s = d.createElement('script');
491        s.type = 'text/javascript';
492        s.async = true;
493        s.src = 'https://comments.apache.org/show_comments.lua?site=' + comments_shortname + '&page=' + comments_identifier;
494        (d.getElementsByTagName('head')[0] || d.getElementsByTagName('body')[0]).appendChild(s);
495    }
496    else { 
497        d.write('<div id="comments_thread">Comments are disabled for this page at the moment.<\/div>');
498    }
499})(window, document);
500//--><!]]></script></div><div id="footer">
501<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>
502<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[//><!--
503if (typeof(prettyPrint) !== 'undefined') {
504    prettyPrint();
505}
506//--><!]]></script>
507</body></html>