While standard HTML files are fine for storing pages, it is
      very useful to be able to create some content dynamically.
      For example, to add a footer or header to all files, or to
      insert document information such as last modified times
      automatically. This can be done with CGI, but that can be
      complex and requires programming or scripting skills. For
      simple dynamic documents there is an alternative:
      server-side-includes (SSI).
    
    
      SSI lets you embed a number of special 'commands' into the
      HTML itself. When the server reads an SSI document, it looks
      for these commands and performs the necessary action. For
      example, there is an SSI command which inserts the document's
      last modification time. When the server reads a file with
      this command in, it replaces the command with the appropriate
      time.
    
    
      Apache includes a set of SSI commands based on those found in
      the NCSA server plus various extensions. This is implemented
      by the includes module (mod_includes).
    
    
    
      By default, the server does not bother looking in HTML files
      for the SSI commands. This would slow down every access to a
      HTML file. To use SSI you need to tell Apache which documents
      contain the SSI commands.
    
    
      One way to do this is to use a special file extension. .shtml
      is often used, and this can be configured with this
      directive:
    
  AddHandler server-parsed .shtml
  AddType    text/html     shtml
    
      The AddHandler directive tells Apache to treat every .shtml
      file as one that can include SSI commands. The AddType
      directive makes such that the resulting content is marked as
      HTML so that the browser displays it properly.
    
    
      An alternative method of telling the server which files
      include SSI commands is to use the so-called XBitHack.
      This involves setting the execute bit on HTML files. Any file
      with a content type of text/html (i.e. an extension .html)
      and with the execute bit set will be checked for SSI
      commands. This needs to be turned on with the
      XBitHack directive.
    
    
      For either method, the server also needs to be configured to
      allow SSIs. This is done with the Options Includes
      directive, which can be placed in either the global
      access.conf or a local .htaccess (although the latter must
      first be enabled with AllowOverride Options). Since
      some SSI commands let the use execute programs which could be
      a security risk, an alternative option,
      IncludesNOExec lets SSI commands work except for any
      which would execute a program.
    
    
    
      All SSI commands are stored within the HTML in HTML comments.
      A typical SSI command looks like this:
    
  <!--#flastmod file="this.html" -->
    
      In this case the command is flastmod, which means
      output the last modified time of the file given. The
      arguments specify the file "this.html" (which might be the
      name of the file containing this command). The whole of the
      command text, including the comment marker <!-- and -->
      will be replaced with the result of this command.
    
    
      In general, all commands take the format:
    
  <!--#command arg1="value1 arg2="value2 ... -->
    
      where arg1, arg2, etc are the names of the arguments and
      value1, value2 etc are the values of those arguments. In the
      flastmod example, the argument is 'file' and it's value is
      'this.html'. Often commands can take different argument
      names. For example, flastmod can be given a URL with the
      argument virtual, to get the last modified time from the
      server. For example:
    
  <!--#flastmod virtual="/" -->
    
      to get the last modification time of the home page on the
      server (this is useful if the page being accessed might have
      a different file name, for instance).
    
    
      Besides flastmod, there are SSI commands which get the size
      of a file or URL, the contents of a variable (passed in by
      the server), the contents of another file or URL, or the
      result of running a local file. These are documented in the
      
      NCSA tutorial on server side includes.
    
    
      When SSI commands are executed, a number of 'environment
      variables' are set. This include the CGI variables
      (REMOTE_HOST etc), and some more, such as DOCUMENT_NAME and
      LAST_MODIFIED. These can be output with the echo
      command (so a better way of getting the last modification
      time of the current file would be 
<!--#echo var="LAST_MODIFIED" -->).
    
    
    
      Apache extends the standard (NCSA-compatible) SSI language
      considerably. Some of the extensions include:
    
    
      - 
        Variables in commands: Apache allows variables to be used
        in any SSI commands. For example, the last modification
        time of the current document could be obtained with
        <!--#flastmod file="$DOCUMENT_NAME" -->
      
- 
        Setting variables: the set command set be used
        within the SSI to set variables.
      
- 
        Conditionals: SSI commands if, else,
        elif and endif can be used to include parts
        of the file based on conditional tests. For example, the
        $HTTP_USER_AGENT variable could be tested to see the type
        of browser and different HTML codes output depending on the
        browser capabilities.
      
      Here are some examples of using SSI:
    
    
      - 
        Displaying document information
      
- 
        The following code puts the document modification time on
        the page: 
  Last modified: <!--#echo var="LAST_MODIFIED" -->
 
         
- 
        Adding a footer to many documents
      
- 
        Add the following text to the bottom of each of the
        documents: 
  <!--#include file="footer.html" -->
 
         
- 
        Hide links from external users
      
- 
        Use the if command and the REMOTE_ADDR CGI variable
        to see if the user is in the local domain: 
  <!--#if expr="$REMOTE_ADDR = /^1.2.3./" -->
    <a href="internal-documents.html">Internal Documents</a>
  <!--#endif -->
          (Where 1.2.3 is the IP address prefix of the local
          domain).