mod_include.xml revision 70e8d18c09fc619b43548bfcb7694fd34f0bd76b
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor<?xml version="1.0"?>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor<!DOCTYPE modulesynopsis SYSTEM "/style/modulesynopsis.dtd">
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor<?xml-stylesheet type="text/xsl" href="/style/manual.en.xsl"?>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor<!-- $Revision: 1.31 $ -->
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor<!--
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor Copyright 2002-2004 The Apache Software Foundation
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor Licensed under the Apache License, Version 2.0 (the "License");
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor you may not use this file except in compliance with the License.
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor You may obtain a copy of the License at
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor http://www.apache.org/licenses/LICENSE-2.0
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor Unless required by applicable law or agreed to in writing, software
3f08db06526d6901aa08c110b5bc7dde6bc39905nd distributed under the License is distributed on an "AS IS" BASIS,
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor See the License for the specific language governing permissions and
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor limitations under the License.
3f08db06526d6901aa08c110b5bc7dde6bc39905nd-->
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor<modulesynopsis metafile="mod_include.xml.meta">
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor<name>mod_include</name>
f086b4b402fa9a2fefc7dda85de2a3cc1cd0a654rjung<description>Server-parsed html documents (Server Side Includes)</description>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor<status>Base</status>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor<sourcefile>mod_include.c</sourcefile>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor<identifier>include_module</identifier>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor<compatibility>Implemented as an output filter since Apache
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor2.0</compatibility>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor
c867dba1041640ecec7c8194d35a5b4ffce442earbowen<summary>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor <p>This module provides a filter which will process files
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor before they are sent to the client. The processing is
c867dba1041640ecec7c8194d35a5b4ffce442earbowen controlled by specially formatted SGML comments, referred to as
c867dba1041640ecec7c8194d35a5b4ffce442earbowen <dfn>elements</dfn>. These elements allow conditional text, the
c867dba1041640ecec7c8194d35a5b4ffce442earbowen inclusion of other files or programs, as well as the setting and
c867dba1041640ecec7c8194d35a5b4ffce442earbowen printing of environment variables.</p>
c867dba1041640ecec7c8194d35a5b4ffce442earbowen</summary>
c867dba1041640ecec7c8194d35a5b4ffce442earbowen<seealso><directive module="core">Options</directive></seealso>
c867dba1041640ecec7c8194d35a5b4ffce442earbowen<seealso><directive module="core">AcceptPathInfo</directive></seealso>
c867dba1041640ecec7c8194d35a5b4ffce442earbowen<seealso><a href="/filter.html">Filters</a></seealso>
c867dba1041640ecec7c8194d35a5b4ffce442earbowen<seealso><a href="/howto/ssi.html">SSI Tutorial</a></seealso>
c867dba1041640ecec7c8194d35a5b4ffce442earbowen
c867dba1041640ecec7c8194d35a5b4ffce442earbowen<section id="enabling">
c867dba1041640ecec7c8194d35a5b4ffce442earbowen <title>Enabling Server-Side Includes</title>
c867dba1041640ecec7c8194d35a5b4ffce442earbowen
c867dba1041640ecec7c8194d35a5b4ffce442earbowen <p>Server Side Includes are implemented by the
c867dba1041640ecec7c8194d35a5b4ffce442earbowen <code>INCLUDES</code> <a href="/filter.html">filter</a>. If
c867dba1041640ecec7c8194d35a5b4ffce442earbowen documents containing server-side include directives are given
c867dba1041640ecec7c8194d35a5b4ffce442earbowen the extension .shtml, the following directives will make Apache
c867dba1041640ecec7c8194d35a5b4ffce442earbowen parse them and assign the resulting document the mime type of
c867dba1041640ecec7c8194d35a5b4ffce442earbowen <code>text/html</code>:</p>
c867dba1041640ecec7c8194d35a5b4ffce442earbowen
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor <example>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor AddType text/html .shtml<br />
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor AddOutputFilter INCLUDES .shtml
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor </example>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor <p>The following directive must be given for the directories
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor containing the shtml files (typically in a
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor <directive module="core" type="section">Directory</directive> section,
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor but this directive is also valid in <code>.htaccess</code> files if
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor <directive module="core">AllowOverride</directive> <code>Options</code>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor is set):</p>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor <example>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor Options +Includes
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor </example>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor <p>For backwards compatibility, the <code>server-parsed</code>
c867dba1041640ecec7c8194d35a5b4ffce442earbowen <a href="/handler.html">handler</a> also activates the
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor INCLUDES filter. As well, Apache will activate the INCLUDES
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor filter for any document with mime type
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor <code>text/x-server-parsed-html</code> or
c867dba1041640ecec7c8194d35a5b4ffce442earbowen <code>text/x-server-parsed-html3</code> (and the resulting
c867dba1041640ecec7c8194d35a5b4ffce442earbowen output will have the mime type <code>text/html</code>).</p>
c867dba1041640ecec7c8194d35a5b4ffce442earbowen
c867dba1041640ecec7c8194d35a5b4ffce442earbowen <p>For more information, see our <a
c867dba1041640ecec7c8194d35a5b4ffce442earbowen href="/howto/ssi.html">Tutorial on Server Side Includes</a>.</p>
c867dba1041640ecec7c8194d35a5b4ffce442earbowen</section> <!-- /enabling -->
c867dba1041640ecec7c8194d35a5b4ffce442earbowen
c867dba1041640ecec7c8194d35a5b4ffce442earbowen<section id="pathinfo">
c867dba1041640ecec7c8194d35a5b4ffce442earbowen <title>PATH_INFO with Server Side Includes</title>
c867dba1041640ecec7c8194d35a5b4ffce442earbowen
c867dba1041640ecec7c8194d35a5b4ffce442earbowen <p>Files processed for server-side includes no longer accept
c867dba1041640ecec7c8194d35a5b4ffce442earbowen requests with <code>PATH_INFO</code> (trailing pathname information)
c867dba1041640ecec7c8194d35a5b4ffce442earbowen by default. You can use the <directive
c867dba1041640ecec7c8194d35a5b4ffce442earbowen module="core">AcceptPathInfo</directive> directive to
c867dba1041640ecec7c8194d35a5b4ffce442earbowen configure the server to accept requests with <code>PATH_INFO</code>.</p>
c867dba1041640ecec7c8194d35a5b4ffce442earbowen</section> <!-- /pathinfo -->
c867dba1041640ecec7c8194d35a5b4ffce442earbowen
c867dba1041640ecec7c8194d35a5b4ffce442earbowen<section id="elements"><title>Basic Elements</title>
c867dba1041640ecec7c8194d35a5b4ffce442earbowen <p>The document is parsed as an HTML document, with special
c867dba1041640ecec7c8194d35a5b4ffce442earbowen commands embedded as SGML comments. A command has the syntax: </p>
c867dba1041640ecec7c8194d35a5b4ffce442earbowen
c867dba1041640ecec7c8194d35a5b4ffce442earbowen <example>
c867dba1041640ecec7c8194d35a5b4ffce442earbowen &lt;!--#<var>element</var> <var>attribute</var>=<var>value</var>
c867dba1041640ecec7c8194d35a5b4ffce442earbowen <var>attribute</var>=<var>value</var> ... --&gt;
c867dba1041640ecec7c8194d35a5b4ffce442earbowen </example>
c867dba1041640ecec7c8194d35a5b4ffce442earbowen
c867dba1041640ecec7c8194d35a5b4ffce442earbowen <p>The value will often be enclosed in double quotes, but single
c867dba1041640ecec7c8194d35a5b4ffce442earbowen quotes (<code>'</code>) and backticks (<code>`</code>) are also
c867dba1041640ecec7c8194d35a5b4ffce442earbowen possible. Many commands only allow a single attribute-value pair.
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor Note that the comment terminator (<code>--&gt;</code>) should be
c867dba1041640ecec7c8194d35a5b4ffce442earbowen preceded by whitespace to ensure that it isn't considered part of
c867dba1041640ecec7c8194d35a5b4ffce442earbowen an SSI token. Note that the leading <code>&lt;!--#</code> is <em>one</em>
c867dba1041640ecec7c8194d35a5b4ffce442earbowen token and may not contain any whitespaces.</p>
c867dba1041640ecec7c8194d35a5b4ffce442earbowen
c867dba1041640ecec7c8194d35a5b4ffce442earbowen <p>The allowed elements are listed in the following table:</p>
c867dba1041640ecec7c8194d35a5b4ffce442earbowen
c867dba1041640ecec7c8194d35a5b4ffce442earbowen <table border="1">
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor <tr><th>Element</th><th>Description</th></tr>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor <tr><td><code><a href="#element.config">config</a></code></td>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor <td>configure output formats</td></tr>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor <tr><td><code><a href="#element.echo">echo</a></code></td>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor <td>print variables</td></tr>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor <tr><td><code><a href="#element.exec">exec</a></code></td>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor <td>execute external programs</td></tr>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor <tr><td><code><a href="#element.fsize">fsize</a></code></td>
c867dba1041640ecec7c8194d35a5b4ffce442earbowen <td>print size of a file</td></tr>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor <tr><td><code><a href="#element.flastmod">flastmod</a></code></td>
fed47023e9be04c612b5f6d4a5ee2b8e7c587181rbowen <td>print last modification time of a file</td></tr>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor <tr><td><code><a href="#element.include">include</a></code></td>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor <td>include a file</td></tr>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor <tr><td><code><a href="#element.printenv">printenv</a></code></td>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor <td>print all available variables</td></tr>
c867dba1041640ecec7c8194d35a5b4ffce442earbowen <tr><td><code><a href="#element.set">set</a></code></td>
c867dba1041640ecec7c8194d35a5b4ffce442earbowen <td>set a value of a variable</td></tr>
8e9c6d6438af1ccb46adaa60d34caa3ac98f3851igalic </table>
8e9c6d6438af1ccb46adaa60d34caa3ac98f3851igalic
c867dba1041640ecec7c8194d35a5b4ffce442earbowen <p>SSI elements may be defined by modules other than
c867dba1041640ecec7c8194d35a5b4ffce442earbowen <module>mod_include</module>. In fact, the <code><a
c867dba1041640ecec7c8194d35a5b4ffce442earbowen href="#element.exec">exec</a></code> element is provided by
8e9c6d6438af1ccb46adaa60d34caa3ac98f3851igalic <module>mod_cgi</module>, and will only be available if this
8e9c6d6438af1ccb46adaa60d34caa3ac98f3851igalic module is loaded.</p>
8e9c6d6438af1ccb46adaa60d34caa3ac98f3851igalic
8e9c6d6438af1ccb46adaa60d34caa3ac98f3851igalic <section id="element.config"><title>The config Element</title>
8e9c6d6438af1ccb46adaa60d34caa3ac98f3851igalic <p>This command controls various aspects of the parsing. The
c867dba1041640ecec7c8194d35a5b4ffce442earbowen valid attributes are:</p>
c867dba1041640ecec7c8194d35a5b4ffce442earbowen
c867dba1041640ecec7c8194d35a5b4ffce442earbowen <dl>
8e9c6d6438af1ccb46adaa60d34caa3ac98f3851igalic <dt><code>echomsg</code> (<em>Apache 2.1 and later</em>)</dt>
8e9c6d6438af1ccb46adaa60d34caa3ac98f3851igalic <dd>The value is a message that is sent back to the
c867dba1041640ecec7c8194d35a5b4ffce442earbowen client if the <code><a href="#element.echo">echo</a></code> element
c867dba1041640ecec7c8194d35a5b4ffce442earbowen attempts to echo an undefined variable. This overrides any <directive
c867dba1041640ecec7c8194d35a5b4ffce442earbowen module="mod_include">SSIUndefinedEcho</directive> directives.</dd>
c867dba1041640ecec7c8194d35a5b4ffce442earbowen
c867dba1041640ecec7c8194d35a5b4ffce442earbowen <dt><code>errmsg</code></dt>
c867dba1041640ecec7c8194d35a5b4ffce442earbowen <dd>The value is a message that is sent back to the
c867dba1041640ecec7c8194d35a5b4ffce442earbowen client if an error occurs while parsing the
c867dba1041640ecec7c8194d35a5b4ffce442earbowen document. This overrides any <directive
c867dba1041640ecec7c8194d35a5b4ffce442earbowen module="mod_include">SSIErrorMsg</directive> directives.</dd>
c867dba1041640ecec7c8194d35a5b4ffce442earbowen
c867dba1041640ecec7c8194d35a5b4ffce442earbowen <dt><code>sizefmt</code></dt>
c867dba1041640ecec7c8194d35a5b4ffce442earbowen <dd>The value sets the format to be used which displaying
c867dba1041640ecec7c8194d35a5b4ffce442earbowen the size of a file. Valid values are <code>bytes</code>
9a58dc6a2b26ec128b1270cf48810e705f1a90dbsf for a count in bytes, or <code>abbrev</code> for a count
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor in Kb or Mb as appropriate, for example a size of 1024 bytes
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor will be printed as "1K".</dd>
c867dba1041640ecec7c8194d35a5b4ffce442earbowen
c867dba1041640ecec7c8194d35a5b4ffce442earbowen <dt><code>timefmt</code></dt>
c867dba1041640ecec7c8194d35a5b4ffce442earbowen <dd>The value is a string to be used by the
c867dba1041640ecec7c8194d35a5b4ffce442earbowen <code>strftime(3)</code> library routine when printing
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor dates.</dd>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor </dl>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor </section> <!-- /config -->
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor <section id="element.echo"><title>The echo Element</title>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor <p>This command prints one of the <a href="#includevars">include
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor variables</a>, defined below. If the variable is unset, the result is
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor determined by the <directive module="mod_include"
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor >SSIUndefinedEcho</directive> directive. Any dates printed are
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor subject to the currently configured <code>timefmt</code>.</p>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor <p>Attributes:</p>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor
fed47023e9be04c612b5f6d4a5ee2b8e7c587181rbowen <dl>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor <dt><code>var</code></dt>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor <dd>The value is the name of the variable to print.</dd>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor
c867dba1041640ecec7c8194d35a5b4ffce442earbowen <dt><code>encoding</code></dt>
c867dba1041640ecec7c8194d35a5b4ffce442earbowen <dd><p>Specifies how Apache should encode special characters
c867dba1041640ecec7c8194d35a5b4ffce442earbowen contained in the variable before outputting them. If set
c867dba1041640ecec7c8194d35a5b4ffce442earbowen to <code>none</code>, no encoding will be done. If set to
c867dba1041640ecec7c8194d35a5b4ffce442earbowen <code>url</code>, then URL encoding (also known as %-encoding;
c867dba1041640ecec7c8194d35a5b4ffce442earbowen this is appropriate for use within URLs in links, etc.) will be
c867dba1041640ecec7c8194d35a5b4ffce442earbowen performed. At the start of an <code>echo</code> element,
c867dba1041640ecec7c8194d35a5b4ffce442earbowen the default is set to <code>entity</code>, resulting in entity
c867dba1041640ecec7c8194d35a5b4ffce442earbowen encoding (which is appropriate in the context of a block-level
c867dba1041640ecec7c8194d35a5b4ffce442earbowen HTML element, <em>e.g.</em> a paragraph of text). This can be
9a58dc6a2b26ec128b1270cf48810e705f1a90dbsf changed by adding an <code>encoding</code> attribute, which will
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor remain in effect until the next <code>encoding</code> attribute
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor is encountered or the element ends, whichever comes first.</p>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor <p>The <code>encoding</code> attribute must <em>precede</em> the
c867dba1041640ecec7c8194d35a5b4ffce442earbowen corresponding <code>var</code> attribute to be effective, and
c867dba1041640ecec7c8194d35a5b4ffce442earbowen only special characters as defined in the ISO-8859-1 character
c867dba1041640ecec7c8194d35a5b4ffce442earbowen encoding will be encoded. This encoding process may not have the
c867dba1041640ecec7c8194d35a5b4ffce442earbowen desired result if a different character encoding is in use.</p>
c867dba1041640ecec7c8194d35a5b4ffce442earbowen
c867dba1041640ecec7c8194d35a5b4ffce442earbowen <note type="warning">
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor In order to avoid cross-site scripting issues, you should
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor <em>always</em> encode user supplied data.
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor </note>
c867dba1041640ecec7c8194d35a5b4ffce442earbowen </dd>
c867dba1041640ecec7c8194d35a5b4ffce442earbowen </dl>
c867dba1041640ecec7c8194d35a5b4ffce442earbowen </section> <!-- /echo -->
c867dba1041640ecec7c8194d35a5b4ffce442earbowen
c867dba1041640ecec7c8194d35a5b4ffce442earbowen <section id="element.exec"><title>The exec Element</title>
c867dba1041640ecec7c8194d35a5b4ffce442earbowen <p>The <code>exec</code> command executes a given shell command or
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor CGI script. It requires <module>mod_cgi</module> to be present
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor in the server. If <directive module="core">Options</directive>
c867dba1041640ecec7c8194d35a5b4ffce442earbowen <code>IncludesNOEXEC</code> is set, this command is completely
c867dba1041640ecec7c8194d35a5b4ffce442earbowen disabled. The valid attributes are:</p>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor <dl>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor <dt><code>cgi</code></dt>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor <dd><p>The value specifies a (%-encoded) URL-path to
c867dba1041640ecec7c8194d35a5b4ffce442earbowen the CGI script. If the path does not begin with a slash (/),
c867dba1041640ecec7c8194d35a5b4ffce442earbowen then it is taken to be relative to the current
c867dba1041640ecec7c8194d35a5b4ffce442earbowen document. The document referenced by this path is
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor invoked as a CGI script, even if the server would not
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor normally recognize it as such. However, the directory
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor containing the script must be enabled for CGI scripts
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor (with <directive module="mod_alias">ScriptAlias</directive>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor or <directive module="core">Options</directive>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor <code>ExecCGI</code>).</p>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor <p>The CGI script is given the <code>PATH_INFO</code> and query
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor string (<code>QUERY_STRING</code>) of the original request from the
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor client; these <em>cannot</em> be specified in the URL path. The
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor include variables will be available to the script in addition to
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor the standard <a href="mod_cgi.html">CGI</a> environment.</p>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor <example><title>Example</title>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor &lt;!--#exec cgi="/cgi-bin/example.cgi" --&gt;
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor </example>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor <p>If the script returns a <code>Location:</code> header instead of
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor output, then this will be translated into an HTML anchor.</p>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor <p>The <code><a href="#includevirtual">include virtual</a></code>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor element should be used in preference to <code>exec cgi</code>. In
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor particular, if you need to pass additional arguments to a CGI program,
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor using the query string, this cannot be done with <code>exec
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor cgi</code>, but can be done with <code>include virtual</code>, as
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor shown here:</p>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor <example>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor &lt;!--#include virtual="/cgi-bin/example.cgi?argument=value" --&gt;
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor </example>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor </dd>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor <dt><code>cmd</code></dt>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor <dd><p>The server will execute the given string using
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor <code>/bin/sh</code>. The <a href="#includevars"
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor >include variables</a> are available to the command, in addition
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor to the usual set of CGI variables.</p>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor <p>The use of <code><a href="#includevirtual"
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor >#include virtual</a></code> is almost always prefered to using
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor either <code>#exec cgi</code> or <code>#exec cmd</code>. The former
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor (<code>#include virtual</code>) uses the standard Apache sub-request
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor mechanism to include files or scripts. It is much better tested and
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor maintained.</p>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor <p>In addition, on some platforms, like Win32, and on unix when
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor using <a href="/suexec.html">suexec</a>, you cannot pass arguments
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor to a command in an <code>exec</code> directive, or otherwise include
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor spaces in the command. Thus, while the following will work under a
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor non-suexec configuration on unix, it will not produce the desired
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor result under Win32, or when running suexec:</p>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor <example>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor &lt;!--#exec cmd="perl /path/to/perlscript arg1 arg2" --&gt;
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor </example>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor </dd>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor </dl>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor </section> <!-- /exec -->
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor <section id="element.fsize"><title>The fsize Element</title>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor <p>This command prints the size of the specified file, subject
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor to the <code>sizefmt</code> format specification. Attributes:</p>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor <dl>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor <dt><code>file</code></dt>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor <dd>The value is a path relative to the directory
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor containing the current document being parsed.</dd>
8e9c6d6438af1ccb46adaa60d34caa3ac98f3851igalic
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor <dt><code>virtual</code></dt>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor <dd>The value is a (%-encoded) URL-path. If it does not begin with
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor a slash (/) then it is taken to be relative to the current document.
9a58dc6a2b26ec128b1270cf48810e705f1a90dbsf Note, that this does <em>not</em> print the size of any CGI output,
c867dba1041640ecec7c8194d35a5b4ffce442earbowen but the size of the CGI script itself.</dd>
c867dba1041640ecec7c8194d35a5b4ffce442earbowen </dl>
c867dba1041640ecec7c8194d35a5b4ffce442earbowen </section> <!-- /fsize -->
c867dba1041640ecec7c8194d35a5b4ffce442earbowen
8e9c6d6438af1ccb46adaa60d34caa3ac98f3851igalic <section id="element.flastmod"><title>The flastmod Element</title>
8e9c6d6438af1ccb46adaa60d34caa3ac98f3851igalic <p>This command prints the last modification date of the
8e9c6d6438af1ccb46adaa60d34caa3ac98f3851igalic specified file, subject to the <code>timefmt</code> format
8e9c6d6438af1ccb46adaa60d34caa3ac98f3851igalic specification. The attributes are the same as for the
9a58dc6a2b26ec128b1270cf48810e705f1a90dbsf <code><a href="#element.fsize">fsize</a></code> command.</p>
8e9c6d6438af1ccb46adaa60d34caa3ac98f3851igalic </section> <!-- /flastmod -->
c867dba1041640ecec7c8194d35a5b4ffce442earbowen
c867dba1041640ecec7c8194d35a5b4ffce442earbowen <section id="element.include"><title>The include Element</title>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor <p>This command inserts the text of another document or file
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor into the parsed file. Any included file is subject to the
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor usual access control. If the directory containing the
c867dba1041640ecec7c8194d35a5b4ffce442earbowen parsed file has <a href="core.html#options">Options</a>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor <code>IncludesNOEXEC</code> set, then only documents with
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor a text MIME type (<code>text/plain</code>, <code>text/html</code>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor etc.) will be included. Otherwise CGI scripts are invoked as normal
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor using the complete URL given in the command, including any query
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor string.</p>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor <p>An attribute defines the location of the document; the
c867dba1041640ecec7c8194d35a5b4ffce442earbowen inclusion is done for each attribute given to the include
c867dba1041640ecec7c8194d35a5b4ffce442earbowen command. The valid attributes are:</p>
c867dba1041640ecec7c8194d35a5b4ffce442earbowen
c867dba1041640ecec7c8194d35a5b4ffce442earbowen <dl>
c867dba1041640ecec7c8194d35a5b4ffce442earbowen <dt><code>file</code></dt>
c867dba1041640ecec7c8194d35a5b4ffce442earbowen <dd>The value is a path relative to the directory
c867dba1041640ecec7c8194d35a5b4ffce442earbowen containing the current document being parsed. It cannot
c867dba1041640ecec7c8194d35a5b4ffce442earbowen contain <code>../</code>, nor can it be an absolute path.
c867dba1041640ecec7c8194d35a5b4ffce442earbowen Therefore, you cannot include files that are outside of the
c867dba1041640ecec7c8194d35a5b4ffce442earbowen document root, or above the current document in the directory
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor structure. The <code>virtual</code> attribute should always be
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor used in preference to this one.</dd>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor <dt><code><a id="includevirtual" name="includevirtual"
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor >virtual</a></code></dt>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor <dd><p>The value is a (%-encoded) URL-path. The URL cannot contain a
53cf0034f617fdca55a345580e13afd88000e9ccjim scheme or hostname, only a path and an optional query string. If it
53cf0034f617fdca55a345580e13afd88000e9ccjim does not begin with a slash (/) then it is taken to be relative to the
53cf0034f617fdca55a345580e13afd88000e9ccjim current document.</p>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor <p>A URL is constructed from the attribute, and the output the
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor server would return if the URL were accessed by the client is
2b6565aedca9e9c10691b12fd2f3689bf4c85bc7jim included in the parsed output. Thus included files can be nested.</p>
2b6565aedca9e9c10691b12fd2f3689bf4c85bc7jim
2b6565aedca9e9c10691b12fd2f3689bf4c85bc7jim <p>If the specified URL is a CGI program, the program will be
2b6565aedca9e9c10691b12fd2f3689bf4c85bc7jim executed and its output inserted in place of the directive in the
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor parsed file. You may include a query string in a CGI url:</p>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor <example>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor &lt;!--#include virtual="/cgi-bin/example.cgi?argument=value" --&gt;
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor </example>
c867dba1041640ecec7c8194d35a5b4ffce442earbowen
c867dba1041640ecec7c8194d35a5b4ffce442earbowen <p><code>include virtual</code> should be used in preference
c867dba1041640ecec7c8194d35a5b4ffce442earbowen to <code>exec cgi</code> to include the output of CGI programs
c867dba1041640ecec7c8194d35a5b4ffce442earbowen into an HTML document.</p>
c867dba1041640ecec7c8194d35a5b4ffce442earbowen </dd>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor </dl>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor </section> <!-- /include -->
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor
c867dba1041640ecec7c8194d35a5b4ffce442earbowen <section id="element.printenv"><title>The printenv Element</title>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor <p>This prints out a listing of all existing variables and
c867dba1041640ecec7c8194d35a5b4ffce442earbowen their values. Special characters are entity encoded (see the <code><a
c867dba1041640ecec7c8194d35a5b4ffce442earbowen href="#element.echo">echo</a></code> element for details)
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor before being output. There are no attributes.</p>
8e9c6d6438af1ccb46adaa60d34caa3ac98f3851igalic
8e9c6d6438af1ccb46adaa60d34caa3ac98f3851igalic <example><title>Example</title>
8e9c6d6438af1ccb46adaa60d34caa3ac98f3851igalic &lt;!--#printenv --&gt;
8e9c6d6438af1ccb46adaa60d34caa3ac98f3851igalic </example>
8e9c6d6438af1ccb46adaa60d34caa3ac98f3851igalic </section> <!-- /printenv -->
8e9c6d6438af1ccb46adaa60d34caa3ac98f3851igalic
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor <section id="element.set"><title>The set Element</title>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor <p>This sets the value of a variable. Attributes:</p>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor <dl>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor <dt><code>var</code></dt>
8e9c6d6438af1ccb46adaa60d34caa3ac98f3851igalic <dd>The name of the variable to set.</dd>
8e9c6d6438af1ccb46adaa60d34caa3ac98f3851igalic
8e9c6d6438af1ccb46adaa60d34caa3ac98f3851igalic <dt><code>value</code></dt>
8e9c6d6438af1ccb46adaa60d34caa3ac98f3851igalic <dd>The value to give a variable.</dd>
c867dba1041640ecec7c8194d35a5b4ffce442earbowen </dl>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor <example><title>Example</title>
c867dba1041640ecec7c8194d35a5b4ffce442earbowen &lt;!--#set var="category" value="help" --&gt;
c867dba1041640ecec7c8194d35a5b4ffce442earbowen </example>
c867dba1041640ecec7c8194d35a5b4ffce442earbowen </section> <!-- /set -->
c867dba1041640ecec7c8194d35a5b4ffce442earbowen</section> <!-- /basic elements -->
c867dba1041640ecec7c8194d35a5b4ffce442earbowen
c867dba1041640ecec7c8194d35a5b4ffce442earbowen<section id="includevars">
c867dba1041640ecec7c8194d35a5b4ffce442earbowen <title>Include Variables</title>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor
c867dba1041640ecec7c8194d35a5b4ffce442earbowen <p>In addition to the variables in the standard CGI environment,
c867dba1041640ecec7c8194d35a5b4ffce442earbowen these are available for the <code>echo</code> command, for
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor <code>if</code> and <code>elif</code>, and to any program
c867dba1041640ecec7c8194d35a5b4ffce442earbowen invoked by the document.</p>
c867dba1041640ecec7c8194d35a5b4ffce442earbowen
c867dba1041640ecec7c8194d35a5b4ffce442earbowen <dl>
c867dba1041640ecec7c8194d35a5b4ffce442earbowen <dt><code>DATE_GMT</code></dt>
c867dba1041640ecec7c8194d35a5b4ffce442earbowen <dd>The current date in Greenwich Mean Time.</dd>
c867dba1041640ecec7c8194d35a5b4ffce442earbowen
c867dba1041640ecec7c8194d35a5b4ffce442earbowen <dt><code>DATE_LOCAL</code></dt>
c867dba1041640ecec7c8194d35a5b4ffce442earbowen <dd>The current date in the local time zone.</dd>
c867dba1041640ecec7c8194d35a5b4ffce442earbowen
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor <dt><code>DOCUMENT_NAME</code></dt>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor <dd>The filename (excluding directories) of the document
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor requested by the user.</dd>
c867dba1041640ecec7c8194d35a5b4ffce442earbowen
c867dba1041640ecec7c8194d35a5b4ffce442earbowen <dt><code>DOCUMENT_URI</code></dt>
c867dba1041640ecec7c8194d35a5b4ffce442earbowen <dd>The (%-decoded) URL path of the document requested by the
c867dba1041640ecec7c8194d35a5b4ffce442earbowen user. Note that in the case of nested include files, this is
c867dba1041640ecec7c8194d35a5b4ffce442earbowen <em>not</em> the URL for the current document.</dd>
c867dba1041640ecec7c8194d35a5b4ffce442earbowen
c867dba1041640ecec7c8194d35a5b4ffce442earbowen <dt><code>LAST_MODIFIED</code></dt>
c867dba1041640ecec7c8194d35a5b4ffce442earbowen <dd>The last modification date of the document requested by
c867dba1041640ecec7c8194d35a5b4ffce442earbowen the user.</dd>
c867dba1041640ecec7c8194d35a5b4ffce442earbowen
c867dba1041640ecec7c8194d35a5b4ffce442earbowen <dt><code>QUERY_STRING_UNESCAPED</code></dt>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor <dd>If a query string is present, this variable contains the
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor (%-decoded) query string, which is <em>escaped</em> for shell
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor usage (special characters like <code>&amp;</code> etc. are
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor preceded by backslashes).</dd>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor </dl>
c867dba1041640ecec7c8194d35a5b4ffce442earbowen</section>
c867dba1041640ecec7c8194d35a5b4ffce442earbowen
c867dba1041640ecec7c8194d35a5b4ffce442earbowen<section id="substitution"><title>Variable Substitution</title>
c867dba1041640ecec7c8194d35a5b4ffce442earbowen
9a58dc6a2b26ec128b1270cf48810e705f1a90dbsf <p>Variable substitution is done within quoted strings in most
c867dba1041640ecec7c8194d35a5b4ffce442earbowen cases where they may reasonably occur as an argument to an SSI
c867dba1041640ecec7c8194d35a5b4ffce442earbowen directive. This includes the <code>config</code>,
c867dba1041640ecec7c8194d35a5b4ffce442earbowen <code>exec</code>, <code>flastmod</code>, <code>fsize</code>,
c867dba1041640ecec7c8194d35a5b4ffce442earbowen <code>include</code>, <code>echo</code>, and <code>set</code>
c867dba1041640ecec7c8194d35a5b4ffce442earbowen directives, as well as the arguments to conditional operators.
c867dba1041640ecec7c8194d35a5b4ffce442earbowen You can insert a literal dollar sign into the string using backslash
c867dba1041640ecec7c8194d35a5b4ffce442earbowen quoting:</p>
c867dba1041640ecec7c8194d35a5b4ffce442earbowen
c867dba1041640ecec7c8194d35a5b4ffce442earbowen <example>
c867dba1041640ecec7c8194d35a5b4ffce442earbowen &lt;!--#if expr="$a = \$test" --&gt;
c867dba1041640ecec7c8194d35a5b4ffce442earbowen </example>
c867dba1041640ecec7c8194d35a5b4ffce442earbowen
c867dba1041640ecec7c8194d35a5b4ffce442earbowen <p>If a variable reference needs to be substituted in the
c867dba1041640ecec7c8194d35a5b4ffce442earbowen middle of a character sequence that might otherwise be
c867dba1041640ecec7c8194d35a5b4ffce442earbowen considered a valid identifier in its own right, it can be
c867dba1041640ecec7c8194d35a5b4ffce442earbowen disambiguated by enclosing the reference in braces,
c867dba1041640ecec7c8194d35a5b4ffce442earbowen <em>a la</em> shell substitution:</p>
c867dba1041640ecec7c8194d35a5b4ffce442earbowen
c867dba1041640ecec7c8194d35a5b4ffce442earbowen <example>
c867dba1041640ecec7c8194d35a5b4ffce442earbowen &lt;!--#set var="Zed" value="${REMOTE_HOST}_${REQUEST_METHOD}" --&gt;
c867dba1041640ecec7c8194d35a5b4ffce442earbowen </example>
c867dba1041640ecec7c8194d35a5b4ffce442earbowen
c867dba1041640ecec7c8194d35a5b4ffce442earbowen <p>This will result in the <code>Zed</code> variable being set
c867dba1041640ecec7c8194d35a5b4ffce442earbowen to "<code>X_Y</code>" if <code>REMOTE_HOST</code> is
c867dba1041640ecec7c8194d35a5b4ffce442earbowen "<code>X</code>" and <code>REQUEST_METHOD</code> is
c867dba1041640ecec7c8194d35a5b4ffce442earbowen "<code>Y</code>".</p>
c867dba1041640ecec7c8194d35a5b4ffce442earbowen
c867dba1041640ecec7c8194d35a5b4ffce442earbowen <p>The below example will print "in foo" if the
c867dba1041640ecec7c8194d35a5b4ffce442earbowen <code>DOCUMENT_URI</code> is <code>/foo/file.html</code>, "in bar"
c867dba1041640ecec7c8194d35a5b4ffce442earbowen if it is <code>/bar/file.html</code> and "in neither" otherwise:</p>
c867dba1041640ecec7c8194d35a5b4ffce442earbowen
c867dba1041640ecec7c8194d35a5b4ffce442earbowen <example>
c867dba1041640ecec7c8194d35a5b4ffce442earbowen &lt;!--#if expr='"$DOCUMENT_URI" = "/foo/file.html"' --&gt;<br />
c867dba1041640ecec7c8194d35a5b4ffce442earbowen <indent>
c867dba1041640ecec7c8194d35a5b4ffce442earbowen in foo<br />
c867dba1041640ecec7c8194d35a5b4ffce442earbowen </indent>
c867dba1041640ecec7c8194d35a5b4ffce442earbowen &lt;!--#elif expr='"$DOCUMENT_URI" = "/bar/file.html"' --&gt;<br />
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor <indent>
c867dba1041640ecec7c8194d35a5b4ffce442earbowen in bar<br />
c867dba1041640ecec7c8194d35a5b4ffce442earbowen </indent>
c867dba1041640ecec7c8194d35a5b4ffce442earbowen &lt;!--#else --&gt;<br />
c867dba1041640ecec7c8194d35a5b4ffce442earbowen <indent>
c867dba1041640ecec7c8194d35a5b4ffce442earbowen in neither<br />
c867dba1041640ecec7c8194d35a5b4ffce442earbowen </indent>
9a58dc6a2b26ec128b1270cf48810e705f1a90dbsf &lt;!--#endif --&gt;
9a58dc6a2b26ec128b1270cf48810e705f1a90dbsf </example>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor</section>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor<section id="flowctrl">
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor <title>Flow Control Elements</title>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor <p>The basic flow control elements are:</p>
c867dba1041640ecec7c8194d35a5b4ffce442earbowen
c867dba1041640ecec7c8194d35a5b4ffce442earbowen <example>
c867dba1041640ecec7c8194d35a5b4ffce442earbowen &lt;!--#if expr="<var>test_condition</var>" --&gt;<br />
c867dba1041640ecec7c8194d35a5b4ffce442earbowen &lt;!--#elif expr="<var>test_condition</var>" --&gt;<br />
c867dba1041640ecec7c8194d35a5b4ffce442earbowen &lt;!--#else --&gt;<br />
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor &lt;!--#endif --&gt;
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor </example>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor <p>The <code>if</code> element works like an if statement in a
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor programming language. The test condition is evaluated and if
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor the result is true, then the text until the next <code>elif</code>,
c867dba1041640ecec7c8194d35a5b4ffce442earbowen <code>else</code> or <code>endif</code> element is included in the
c867dba1041640ecec7c8194d35a5b4ffce442earbowen output stream.</p>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor <p>The <code>elif</code> or <code>else</code> statements are be used
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor to put text into the output stream if the original
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor <var>test_condition</var> was false. These elements are optional.</p>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor <p>The <code>endif</code> element ends the <code>if</code> element
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor and is required.</p>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor <p><var>test_condition</var> is one of the following:</p>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor <dl>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor <dt><code><var>string</var></code></dt>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor <dd>true if <var>string</var> is not empty</dd>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor <dt><code><var>string1</var> = <var>string2</var><br />
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor <var>string1</var> == <var>string2</var><br />
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor <var>string1</var> != <var>string2</var></code></dt>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor <dd><p>Compare <var>string1</var> with <var>string2</var>. If
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor <var>string2</var> has the form <code>/<var>string2</var>/</code>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor then it is treated as a regular expression. Regular expressions are
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor implemented by the <a href="http://www.pcre.org">PCRE</a> engine and
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor have the same syntax as those in <a href="http://www.perl.com">perl
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor 5</a>. Note that <code>==</code> is just an alias for <code>=</code>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor and behaves exactly the same way.</p>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor <p>If you are matching positive (<code>=</code> or <code>==</code>), you
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor can capture grouped parts of the regular expression. The captured parts
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor are stored in the special variables <code>$1</code> ..
c867dba1041640ecec7c8194d35a5b4ffce442earbowen <code>$9</code>.</p>
c867dba1041640ecec7c8194d35a5b4ffce442earbowen
c867dba1041640ecec7c8194d35a5b4ffce442earbowen <example><title>Example</title>
c867dba1041640ecec7c8194d35a5b4ffce442earbowen &lt;!--#if expr="$QUERY_STRING = /^sid=([a-zA-Z0-9]+)/" --&gt;<br />
c867dba1041640ecec7c8194d35a5b4ffce442earbowen <indent>
c867dba1041640ecec7c8194d35a5b4ffce442earbowen &lt;!--#set var="session" value="$1" --&gt;<br />
c867dba1041640ecec7c8194d35a5b4ffce442earbowen </indent>
c867dba1041640ecec7c8194d35a5b4ffce442earbowen &lt;!--#endif --&gt;
c867dba1041640ecec7c8194d35a5b4ffce442earbowen </example>
c867dba1041640ecec7c8194d35a5b4ffce442earbowen </dd>
c867dba1041640ecec7c8194d35a5b4ffce442earbowen
c867dba1041640ecec7c8194d35a5b4ffce442earbowen <dt><code><var>string1</var> &lt; <var>string2</var><br />
c867dba1041640ecec7c8194d35a5b4ffce442earbowen <var>string1</var> &lt;= <var>string2</var><br />
c867dba1041640ecec7c8194d35a5b4ffce442earbowen <var>string1</var> &gt; <var>string2</var><br />
c867dba1041640ecec7c8194d35a5b4ffce442earbowen <var>string1</var> &gt;= <var>string2</var></code></dt>
c867dba1041640ecec7c8194d35a5b4ffce442earbowen
c867dba1041640ecec7c8194d35a5b4ffce442earbowen <dd>Compare <var>string1</var> with <var>string2</var>. Note, that
c867dba1041640ecec7c8194d35a5b4ffce442earbowen strings are compared <em>literally</em> (using
c867dba1041640ecec7c8194d35a5b4ffce442earbowen <code>strcmp(3)</code>). Therefore the string "100" is less than
c867dba1041640ecec7c8194d35a5b4ffce442earbowen "20".</dd>
c867dba1041640ecec7c8194d35a5b4ffce442earbowen
c867dba1041640ecec7c8194d35a5b4ffce442earbowen <dt><code>( <var>test_condition</var> )</code></dt>
c867dba1041640ecec7c8194d35a5b4ffce442earbowen <dd>true if <var>test_condition</var> is true</dd>
c867dba1041640ecec7c8194d35a5b4ffce442earbowen
c867dba1041640ecec7c8194d35a5b4ffce442earbowen <dt><code>! <var>test_condition</var></code></dt>
c867dba1041640ecec7c8194d35a5b4ffce442earbowen <dd>true if <var>test_condition</var> is false</dd>
c867dba1041640ecec7c8194d35a5b4ffce442earbowen
c867dba1041640ecec7c8194d35a5b4ffce442earbowen <dt><code><var>test_condition1</var> &amp;&amp;
c867dba1041640ecec7c8194d35a5b4ffce442earbowen <var>test_condition2</var></code></dt>
c867dba1041640ecec7c8194d35a5b4ffce442earbowen <dd>true if both <var>test_condition1</var> and
c867dba1041640ecec7c8194d35a5b4ffce442earbowen <var>test_condition2</var> are true</dd>
c867dba1041640ecec7c8194d35a5b4ffce442earbowen
c867dba1041640ecec7c8194d35a5b4ffce442earbowen <dt><code><var>test_condition1</var> ||
c867dba1041640ecec7c8194d35a5b4ffce442earbowen <var>test_condition2</var></code></dt>
c867dba1041640ecec7c8194d35a5b4ffce442earbowen <dd>true if either <var>test_condition1</var> or
c867dba1041640ecec7c8194d35a5b4ffce442earbowen <var>test_condition2</var> is true</dd>
9a58dc6a2b26ec128b1270cf48810e705f1a90dbsf </dl>
c867dba1041640ecec7c8194d35a5b4ffce442earbowen
c867dba1041640ecec7c8194d35a5b4ffce442earbowen <p>"<code>=</code>" and "<code>!=</code>" bind more tightly than
c867dba1041640ecec7c8194d35a5b4ffce442earbowen "<code>&amp;&amp;</code>" and "<code>||</code>". "<code>!</code>" binds
c867dba1041640ecec7c8194d35a5b4ffce442earbowen most tightly. Thus, the following are equivalent:</p>
c867dba1041640ecec7c8194d35a5b4ffce442earbowen
c867dba1041640ecec7c8194d35a5b4ffce442earbowen <example>
c867dba1041640ecec7c8194d35a5b4ffce442earbowen &lt;!--#if expr="$a = test1 &amp;&amp; $b = test2" --&gt;<br />
c867dba1041640ecec7c8194d35a5b4ffce442earbowen &lt;!--#if expr="($a = test1) &amp;&amp; ($b = test2)" --&gt;
c867dba1041640ecec7c8194d35a5b4ffce442earbowen </example>
c867dba1041640ecec7c8194d35a5b4ffce442earbowen
c867dba1041640ecec7c8194d35a5b4ffce442earbowen <p>The boolean operators <code>&amp;&amp;</code> and <code>||</code>
c867dba1041640ecec7c8194d35a5b4ffce442earbowen share the same priority. So if you want to bind such an operator more
c867dba1041640ecec7c8194d35a5b4ffce442earbowen tightly, you should use parentheses.</p>
c867dba1041640ecec7c8194d35a5b4ffce442earbowen
c867dba1041640ecec7c8194d35a5b4ffce442earbowen <p>Anything that's not recognized as a variable or an operator
c867dba1041640ecec7c8194d35a5b4ffce442earbowen is treated as a string. Strings can also be quoted:
c867dba1041640ecec7c8194d35a5b4ffce442earbowen <code>'string'</code>. Unquoted strings can't contain whitespace
9a58dc6a2b26ec128b1270cf48810e705f1a90dbsf (blanks and tabs) because it is used to separate tokens such as
c867dba1041640ecec7c8194d35a5b4ffce442earbowen variables. If multiple strings are found in a row, they are
c867dba1041640ecec7c8194d35a5b4ffce442earbowen concatenated using blanks. So,</p>
c867dba1041640ecec7c8194d35a5b4ffce442earbowen
c867dba1041640ecec7c8194d35a5b4ffce442earbowen <example>
c867dba1041640ecec7c8194d35a5b4ffce442earbowen <p><code><var>string1</var>&nbsp;&nbsp;&nbsp;&nbsp;<var
c867dba1041640ecec7c8194d35a5b4ffce442earbowen >string2</var></code> results in <code><var>string1</var>&nbsp;<var
c867dba1041640ecec7c8194d35a5b4ffce442earbowen >string2</var></code><br />
c867dba1041640ecec7c8194d35a5b4ffce442earbowen <br />
c867dba1041640ecec7c8194d35a5b4ffce442earbowen and<br />
c867dba1041640ecec7c8194d35a5b4ffce442earbowen <br />
c867dba1041640ecec7c8194d35a5b4ffce442earbowen <code>'<var>string1</var>&nbsp;&nbsp;&nbsp;&nbsp;<var
c867dba1041640ecec7c8194d35a5b4ffce442earbowen >string2</var>'</code> results in <code><var
c867dba1041640ecec7c8194d35a5b4ffce442earbowen >string1</var>&nbsp;&nbsp;&nbsp;&nbsp;<var>string2</var></code>.</p>
c867dba1041640ecec7c8194d35a5b4ffce442earbowen </example>
c867dba1041640ecec7c8194d35a5b4ffce442earbowen
c867dba1041640ecec7c8194d35a5b4ffce442earbowen <note><title>Optimization of Boolean Expressions</title>
c867dba1041640ecec7c8194d35a5b4ffce442earbowen <p>If the expressions become more complex and slow down processing
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor significantly, you can try to optimize them according to the
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor evaluation rules:</p>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor <ul>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor <li>Expressions are evaluated from left to right</li>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor <li>Binary boolean operators (<code>&amp;&amp;</code> and <code>||</code>)
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor are short circuited wherever possible. In conclusion with the rule
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor above that means, <module>mod_include</module> evaluates at first
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor the left expression. If the left result is sufficient to determine
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor the end result, processing stops here. Otherwise it evaluates the
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor right side and computes the end result from both left and right
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor results.</li>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor <li>Short circuit evaluation is turned off as long as there are regular
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor expressions to deal with. These must be evaluated to fill in the
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor backreference variables (<code>$1</code> .. <code>$9</code>).</li>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor </ul>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor <p>If you want to look how a particular expression is handled, you can
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor recompile <module>mod_include</module> using the
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor <code>-DDEBUG_INCLUDE</code> compiler option. This inserts for every
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor parsed expression tokenizer information, the parse tree and how it is
c867dba1041640ecec7c8194d35a5b4ffce442earbowen evaluated into the output sent to the client.</p>
c867dba1041640ecec7c8194d35a5b4ffce442earbowen </note>
c867dba1041640ecec7c8194d35a5b4ffce442earbowen</section>
c867dba1041640ecec7c8194d35a5b4ffce442earbowen
c867dba1041640ecec7c8194d35a5b4ffce442earbowen<directivesynopsis>
c867dba1041640ecec7c8194d35a5b4ffce442earbowen<name>SSIEndTag</name>
c867dba1041640ecec7c8194d35a5b4ffce442earbowen<description>String that ends an include element</description>
c867dba1041640ecec7c8194d35a5b4ffce442earbowen<syntax>SSIEndTag <var>tag</var></syntax>
c867dba1041640ecec7c8194d35a5b4ffce442earbowen<default>SSIEndTag &quot;--&gt;&quot;</default>
c867dba1041640ecec7c8194d35a5b4ffce442earbowen<contextlist><context>server config</context><context>virtual host</context>
c867dba1041640ecec7c8194d35a5b4ffce442earbowen</contextlist>
c867dba1041640ecec7c8194d35a5b4ffce442earbowen<compatibility>Available in version 2.0.30 and later.</compatibility>
c867dba1041640ecec7c8194d35a5b4ffce442earbowen
c867dba1041640ecec7c8194d35a5b4ffce442earbowen<usage>
c867dba1041640ecec7c8194d35a5b4ffce442earbowen <p>This directive changes the string that <module>mod_include</module>
c867dba1041640ecec7c8194d35a5b4ffce442earbowen looks for to mark the end of an include element.</p>
c867dba1041640ecec7c8194d35a5b4ffce442earbowen
c867dba1041640ecec7c8194d35a5b4ffce442earbowen <example><title>Example</title>
c867dba1041640ecec7c8194d35a5b4ffce442earbowen SSIEndTag "%&gt;"
c867dba1041640ecec7c8194d35a5b4ffce442earbowen </example>
c867dba1041640ecec7c8194d35a5b4ffce442earbowen
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor</usage>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor<seealso><directive module="mod_include">SSIStartTag</directive></seealso>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor</directivesynopsis>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor<directivesynopsis>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor<name>SSIUndefinedEcho</name>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor<description>String displayed when an unset variable is echoed</description>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor<syntax>SSIUndefinedEcho <var>string</var></syntax>
c867dba1041640ecec7c8194d35a5b4ffce442earbowen<default>SSIUndefinedEcho &quot;(none)&quot;</default>
c867dba1041640ecec7c8194d35a5b4ffce442earbowen<contextlist><context>server config</context><context>virtual host</context>
c867dba1041640ecec7c8194d35a5b4ffce442earbowen<context>directory</context><context>.htaccess</context></contextlist>
c867dba1041640ecec7c8194d35a5b4ffce442earbowen<override>All</override>
c867dba1041640ecec7c8194d35a5b4ffce442earbowen<compatibility>Available in version 2.0.34 and later.</compatibility>
c867dba1041640ecec7c8194d35a5b4ffce442earbowen
c867dba1041640ecec7c8194d35a5b4ffce442earbowen<usage>
c867dba1041640ecec7c8194d35a5b4ffce442earbowen <p>This directive changes the string that <module>mod_include</module>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor displays when a variable is not set and &quot;echoed&quot;.</p>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor <example><title>Example</title>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor SSIUndefinedEcho "&lt;!-- undef --&gt;"
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor </example>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor</usage>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor</directivesynopsis>
8e9c6d6438af1ccb46adaa60d34caa3ac98f3851igalic
8e9c6d6438af1ccb46adaa60d34caa3ac98f3851igalic<directivesynopsis>
8e9c6d6438af1ccb46adaa60d34caa3ac98f3851igalic<name>SSIErrorMsg</name>
8e9c6d6438af1ccb46adaa60d34caa3ac98f3851igalic<description>Error message displayed when there is an SSI
8e9c6d6438af1ccb46adaa60d34caa3ac98f3851igalicerror</description>
8e9c6d6438af1ccb46adaa60d34caa3ac98f3851igalic<syntax>SSIErrorMsg <var>message</var></syntax>
8e9c6d6438af1ccb46adaa60d34caa3ac98f3851igalic<default>SSIErrorMsg &quot;[an error occurred while processing this
8e9c6d6438af1ccb46adaa60d34caa3ac98f3851igalicdirective]&quot;</default>
8e9c6d6438af1ccb46adaa60d34caa3ac98f3851igalic<contextlist><context>server config</context><context>virtual host</context>
8e9c6d6438af1ccb46adaa60d34caa3ac98f3851igalic<context>directory</context><context>.htaccess</context></contextlist>
8e9c6d6438af1ccb46adaa60d34caa3ac98f3851igalic<override>All</override>
8e9c6d6438af1ccb46adaa60d34caa3ac98f3851igalic<compatibility>Available in version 2.0.30 and later.</compatibility>
8e9c6d6438af1ccb46adaa60d34caa3ac98f3851igalic
8e9c6d6438af1ccb46adaa60d34caa3ac98f3851igalic<usage>
8e9c6d6438af1ccb46adaa60d34caa3ac98f3851igalic <p>The <directive>SSIErrorMsg</directive> directive changes the error
8e9c6d6438af1ccb46adaa60d34caa3ac98f3851igalic message displayed when <module>mod_include</module> encounters an
8e9c6d6438af1ccb46adaa60d34caa3ac98f3851igalic error. For production servers you may consider changing the default
8e9c6d6438af1ccb46adaa60d34caa3ac98f3851igalic error message to <code>&quot;&lt;!-- Error --&gt;&quot;</code> so that
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor the message is not presented to the user.</p>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor <p>This directive has the same effect as the <code>&lt;!--#config
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor errmsg=<var>message</var> --&gt;</code> element.</p>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor <example><title>Example</title>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor SSIErrorMsg "&lt;!-- Error --&gt;"
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor </example>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor</usage>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor</directivesynopsis>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor<directivesynopsis>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor<name>SSIStartTag</name>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor<description>String that starts an include element</description>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor<syntax>SSIStartTag <var>tag</var></syntax>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor<default>SSIStartTag &quot;&lt;!--#&quot;</default>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor<contextlist><context>server config</context><context>virtual host</context>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor</contextlist>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor<compatibility>Available in version 2.0.30 and later.</compatibility>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor<usage>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor <p>This directive changes the string that <module>mod_include</module>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor looks for to mark an include element to process.</p>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor <p>You may want to use this option if you have 2 servers parsing the
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor output of a file each processing different commands (possibly at
c867dba1041640ecec7c8194d35a5b4ffce442earbowen different times).</p>
c867dba1041640ecec7c8194d35a5b4ffce442earbowen
c867dba1041640ecec7c8194d35a5b4ffce442earbowen <example><title>Example</title>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor SSIStartTag "&lt;%"<br />
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor SSIEndTag "%&gt;"
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor </example>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor <p>The example given above, which also specifies a matching
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor <directive module="mod_include">SSIEndTag</directive>, will
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor allow you to use SSI directives as shown in the example
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor below:</p>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor <example><title>SSI directives with alternate start and end tags</title>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor &lt;%printenv %&gt;
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor </example>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor</usage>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor<seealso><directive module="mod_include">SSIEndTag</directive></seealso>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor</directivesynopsis>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor<directivesynopsis>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor<name>SSITimeFormat</name>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor<description>Configures the format in which date strings are
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzordisplayed</description>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor<syntax>SSITimeFormat <var>formatstring</var></syntax>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor<default>SSITimeFormat &quot;%A, %d-%b-%Y %H:%M:%S %Z&quot;</default>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor<contextlist>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor<context>server config</context><context>virtual host</context>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor<context>directory</context><context>.htaccess</context></contextlist>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor<override>All</override>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor<compatibility>Available in version 2.0.30 and later.</compatibility>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor
c867dba1041640ecec7c8194d35a5b4ffce442earbowen<usage>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor<p>This directive changes the format in which date strings are displayed
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor when echoing <code>DATE</code> environment variables. The
c867dba1041640ecec7c8194d35a5b4ffce442earbowen <var>formatstring</var> is as in <code>strftime(3)</code> from the
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor C standard library.</p>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor <p>This directive has the same effect as the <code>&lt;!--#config
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor timefmt=<var>formatstring</var> --&gt;</code> element.</p>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor <example><title>Example</title>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor SSITimeFormat "%R, %B %d, %Y"
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor </example>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor <p>The above directive would cause times to be displayed in the
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor format "22:26, June 14, 2002".</p>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor</usage>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor</directivesynopsis>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor<directivesynopsis>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor<name>XBitHack</name>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor<description>Parse SSI directives in files with the execute bit
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzorset</description>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor<syntax>XBitHack on|off|full</syntax>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor<default>XBitHack off</default>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor<contextlist><context>server config</context><context>virtual host</context>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor<context>directory</context><context>.htaccess</context></contextlist>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor<override>Options</override>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor<usage>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor <p>The <directive>XBitHack</directive> directive controls the parsing
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor of ordinary html documents. This directive only affects files associated
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor with the MIME type <code>text/html</code>. <directive
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor >XBitHack</directive> can take on the following values:</p>
fed47023e9be04c612b5f6d4a5ee2b8e7c587181rbowen
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor <dl>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor <dt><code>off</code></dt>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor <dd>No special treatment of executable files.</dd>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor <dt><code>on</code></dt>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor <dd>Any <code>text/html</code> file that has the user-execute bit
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor set will be treated as a server-parsed html document.</dd>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor <dt><code>full</code></dt>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor <dd>As for <code>on</code> but also test the group-execute bit.
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor If it is set, then set the <code>Last-modified</code> date of the
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor returned file to be the last modified time of the file. If
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor it is not set, then no last-modified date is sent. Setting
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor this bit allows clients and proxies to cache the result of
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor the request.
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor <note><title>Note</title>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor <p>You would not want to use the full option, unless you assure the
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor group-execute bit is unset for every SSI script which might <code
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor >#include</code> a CGI or otherwise produces different output on
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor each hit (or could potentially change on subsequent requests).</p>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor </note>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor </dd>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor </dl>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor </usage>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor</directivesynopsis>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor</modulesynopsis>
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor
dc3a272f8afcbc137adcfee4c3aa052d2bdf4df7gryzor