github.com/krum110487/go-htaccess@v0.0.0-20240316004156-60641c8e7598/tests/data/apache_2_2_34/manual/howto/ssi.html.en (about)

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