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="<-" 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.4</a> > <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"> en </a> | 25<a href="/fr/howto/ssi.html" hreflang="fr" rel="alternate" title="Fran�ais"> fr </a> | 26<a href="/ja/howto/ssi.html" hreflang="ja" rel="alternate" title="Japanese"> ja </a> | 27<a href="/ko/howto/ssi.html" hreflang="ko" rel="alternate" title="Korean"> ko </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 <!--#echo var="DATE_LOCAL" --> 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 <!--#function attribute=value attribute=value ... --> 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 <!--#echo var="DATE_LOCAL" --> 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 <!--#config timefmt="%A %B %d, %Y" --><br /> 203 Today is <!--#echo var="DATE_LOCAL" --> 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 <!--#flastmod file="index.html" --> 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 <!--#include virtual="/cgi-bin/counter.pl" --> 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 <!--#config timefmt="%A %B %d, %Y" --><br /> 247 This file last modified <!--#flastmod file="ssi.shtml" --> 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 <!--#config timefmt="%D" --><br /> 258 This file last modified <!--#echo var="LAST_MODIFIED" --> 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 <!--#include virtual="/footer.html" --> 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 <!--#config errmsg="[It appears that you don't know how to use SSI]" --> 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 <pre><br /> 342 <!--#exec cmd="ls" --><br /> 343 </pre> 344</code></p></div> 345 346 <p>or, on Windows</p> 347<div class="example"><p><code> 348 <pre><br /> 349 <!--#exec cmd="dir" --><br /> 350 </pre> 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 ``<<code>dir</code>>'' 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 <!--#set var="name" value="Rich" --> 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> <!--#set var="modified" value="$LAST_MODIFIED" --> 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 <!--#set var="cost" value="\$100" --> 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 <!--#set var="date" value="${DATE_LOCAL}_${DATE_GMT}" --> 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 <!--#if expr="test_condition" --><br /> 428 <!--#elif expr="test_condition" --><br /> 429 <!--#else --><br /> 430 <!--#endif --> 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 <!--#if expr="-T reqenv('Mac') && 455 -T reqenv('InternetExplorer')" --><br /> 456 Apologetic text goes here<br /> 457 <!--#else --><br /> 458 Cool JavaScript code goes here<br /> 459 <!--#endif --> 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"> en </a> | 480<a href="/fr/howto/ssi.html" hreflang="fr" rel="alternate" title="Fran�ais"> fr </a> | 481<a href="/ja/howto/ssi.html" hreflang="ja" rel="alternate" title="Japanese"> ja </a> | 482<a href="/ko/howto/ssi.html" hreflang="ko" rel="alternate" title="Korean"> ko </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&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>