~ubuntu-branches/ubuntu/feisty/apache2/feisty

« back to all changes in this revision

Viewing changes to docs/manual/mod/mod_include.html.en

  • Committer: Bazaar Package Importer
  • Author(s): Andreas Barth
  • Date: 2006-12-09 21:05:45 UTC
  • mfrom: (0.6.1 upstream)
  • Revision ID: james.westby@ubuntu.com-20061209210545-h70s0xaqc2v8vqr2
Tags: 2.2.3-3.2
* Non-maintainer upload.
* 043_ajp_connection_reuse: Patch from upstream Bugzilla, fixing a critical
  issue with regard to connection reuse in mod_proxy_ajp.
  Closes: #396265

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
<?xml version="1.0" encoding="ISO-8859-1"?>
 
2
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
 
3
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!--
 
4
        XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
 
5
              This file is generated from xml source: DO NOT EDIT
 
6
        XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
 
7
      -->
 
8
<title>mod_include - Apache HTTP Server</title>
 
9
<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
 
10
<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
 
11
<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
 
12
<link href="../images/favicon.ico" rel="shortcut icon" /></head>
 
13
<body>
 
14
<div id="page-header">
 
15
<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p>
 
16
<p class="apache">Apache HTTP Server Version 2.2</p>
 
17
<img alt="" src="../images/feather.gif" /></div>
 
18
<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
 
19
<div id="path">
 
20
<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="./">Modules</a></div>
 
21
<div id="page-content">
 
22
<div id="preamble"><h1>Apache Module mod_include</h1>
 
23
<div class="toplang">
 
24
<p><span>Available Languages: </span><a href="../en/mod/mod_include.html" title="English">&nbsp;en&nbsp;</a> |
 
25
<a href="../ja/mod/mod_include.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a></p>
 
26
</div>
 
27
<table class="module"><tr><th><a href="module-dict.html#Description">Description:</a></th><td>Server-parsed html documents (Server Side Includes)</td></tr>
 
28
<tr><th><a href="module-dict.html#Status">Status:</a></th><td>Base</td></tr>
 
29
<tr><th><a href="module-dict.html#ModuleIdentifier">Module�Identifier:</a></th><td>include_module</td></tr>
 
30
<tr><th><a href="module-dict.html#SourceFile">Source�File:</a></th><td>mod_include.c</td></tr>
 
31
<tr><th><a href="module-dict.html#Compatibility">Compatibility:</a></th><td>Implemented as an output filter since Apache
 
32
2.0</td></tr></table>
 
33
<h3>Summary</h3>
 
34
 
 
35
    <p>This module provides a filter which will process files
 
36
    before they are sent to the client. The processing is
 
37
    controlled by specially formatted SGML comments, referred to as
 
38
    <dfn>elements</dfn>. These elements allow conditional text, the
 
39
    inclusion of other files or programs, as well as the setting and
 
40
    printing of environment variables.</p>
 
41
</div>
 
42
<div id="quickview"><h3 class="directives">Directives</h3>
 
43
<ul id="toc">
 
44
<li><img alt="" src="../images/down.gif" /> <a href="#ssiendtag">SSIEndTag</a></li>
 
45
<li><img alt="" src="../images/down.gif" /> <a href="#ssierrormsg">SSIErrorMsg</a></li>
 
46
<li><img alt="" src="../images/down.gif" /> <a href="#ssistarttag">SSIStartTag</a></li>
 
47
<li><img alt="" src="../images/down.gif" /> <a href="#ssitimeformat">SSITimeFormat</a></li>
 
48
<li><img alt="" src="../images/down.gif" /> <a href="#ssiundefinedecho">SSIUndefinedEcho</a></li>
 
49
<li><img alt="" src="../images/down.gif" /> <a href="#xbithack">XBitHack</a></li>
 
50
</ul>
 
51
<h3>Topics</h3>
 
52
<ul id="topics">
 
53
<li><img alt="" src="../images/down.gif" /> <a href="#enabling">Enabling Server-Side Includes</a></li>
 
54
<li><img alt="" src="../images/down.gif" /> <a href="#pathinfo">PATH_INFO with Server Side Includes</a></li>
 
55
<li><img alt="" src="../images/down.gif" /> <a href="#elements">Basic Elements</a></li>
 
56
<li><img alt="" src="../images/down.gif" /> <a href="#includevars">Include Variables</a></li>
 
57
<li><img alt="" src="../images/down.gif" /> <a href="#substitution">Variable Substitution</a></li>
 
58
<li><img alt="" src="../images/down.gif" /> <a href="#flowctrl">Flow Control Elements</a></li>
 
59
</ul><h3>See also</h3>
 
60
<ul class="seealso">
 
61
<li><code class="directive"><a href="../mod/core.html#options">Options</a></code></li>
 
62
<li><code class="directive"><a href="../mod/core.html#acceptpathinfo">AcceptPathInfo</a></code></li>
 
63
<li><a href="../filter.html">Filters</a></li>
 
64
<li><a href="../howto/ssi.html">SSI Tutorial</a></li>
 
65
</ul></div>
 
66
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
 
67
<div class="section">
 
68
<h2><a name="enabling" id="enabling">Enabling Server-Side Includes</a></h2>
 
69
    
 
70
 
 
71
    <p>Server Side Includes are implemented by the
 
72
    <code>INCLUDES</code> <a href="../filter.html">filter</a>. If
 
73
    documents containing server-side include directives are given
 
74
    the extension .shtml, the following directives will make Apache
 
75
    parse them and assign the resulting document the mime type of
 
76
    <code>text/html</code>:</p>
 
77
 
 
78
    <div class="example"><p><code>
 
79
      AddType text/html .shtml<br />
 
80
      AddOutputFilter INCLUDES .shtml
 
81
    </code></p></div>
 
82
 
 
83
    <p>The following directive must be given for the directories
 
84
    containing the shtml files (typically in a
 
85
    <code class="directive"><a href="../mod/core.html#directory">&lt;Directory&gt;</a></code> section,
 
86
    but this directive is also valid in <code>.htaccess</code> files if
 
87
    <code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code> <code>Options</code>
 
88
    is set):</p>
 
89
 
 
90
    <div class="example"><p><code>
 
91
      Options +Includes
 
92
    </code></p></div>
 
93
 
 
94
    <p>For backwards compatibility, the <code>server-parsed</code>
 
95
    <a href="../handler.html">handler</a> also activates the
 
96
    INCLUDES filter. As well, Apache will activate the INCLUDES
 
97
    filter for any document with mime type
 
98
    <code>text/x-server-parsed-html</code> or
 
99
    <code>text/x-server-parsed-html3</code> (and the resulting
 
100
    output will have the mime type <code>text/html</code>).</p>
 
101
 
 
102
    <p>For more information, see our <a href="../howto/ssi.html">Tutorial on Server Side Includes</a>.</p>
 
103
</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
 
104
<div class="section">
 
105
<h2><a name="pathinfo" id="pathinfo">PATH_INFO with Server Side Includes</a></h2>
 
106
    
 
107
 
 
108
    <p>Files processed for server-side includes no longer accept
 
109
    requests with <code>PATH_INFO</code> (trailing pathname information)
 
110
    by default.  You can use the <code class="directive"><a href="../mod/core.html#acceptpathinfo">AcceptPathInfo</a></code> directive to
 
111
    configure the server to accept requests with <code>PATH_INFO</code>.</p>
 
112
</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
 
113
<div class="section">
 
114
<h2><a name="elements" id="elements">Basic Elements</a></h2>
 
115
    <p>The document is parsed as an HTML document, with special
 
116
    commands embedded as SGML comments. A command has the syntax: </p>
 
117
 
 
118
    <div class="example"><p><code>
 
119
      &lt;!--#<var>element</var> <var>attribute</var>=<var>value</var>
 
120
      <var>attribute</var>=<var>value</var> ... --&gt;
 
121
    </code></p></div>
 
122
 
 
123
    <p>The value will often be enclosed in double quotes, but single
 
124
    quotes (<code>'</code>) and backticks (<code>`</code>) are also
 
125
    possible. Many commands only allow a single attribute-value pair.
 
126
    Note that the comment terminator (<code>--&gt;</code>) should be
 
127
    preceded by whitespace to ensure that it isn't considered part of
 
128
    an SSI token. Note that the leading <code>&lt;!--#</code> is <em>one</em>
 
129
    token and may not contain any whitespaces.</p>
 
130
 
 
131
    <p>The allowed elements are listed in the following table:</p>
 
132
 
 
133
    <table class="bordered">
 
134
    <tr><th>Element</th><th>Description</th></tr>
 
135
    <tr><td><code><a href="#element.config">config</a></code></td>
 
136
        <td>configure output formats</td></tr>
 
137
    <tr><td><code><a href="#element.echo">echo</a></code></td>
 
138
        <td>print variables</td></tr>
 
139
    <tr><td><code><a href="#element.exec">exec</a></code></td>
 
140
        <td>execute external programs</td></tr>
 
141
    <tr><td><code><a href="#element.fsize">fsize</a></code></td>
 
142
        <td>print size of a file</td></tr>
 
143
    <tr><td><code><a href="#element.flastmod">flastmod</a></code></td>
 
144
        <td>print last modification time of a file</td></tr>
 
145
    <tr><td><code><a href="#element.include">include</a></code></td>
 
146
        <td>include a file</td></tr>
 
147
    <tr><td><code><a href="#element.printenv">printenv</a></code></td>
 
148
        <td>print all available variables</td></tr>
 
149
    <tr><td><code><a href="#element.set">set</a></code></td>
 
150
        <td>set a value of a variable</td></tr>
 
151
    </table>
 
152
 
 
153
    <p>SSI elements may be defined by modules other than
 
154
    <code class="module"><a href="../mod/mod_include.html">mod_include</a></code>. In fact, the <code><a href="#element.exec">exec</a></code> element is provided by
 
155
    <code class="module"><a href="../mod/mod_cgi.html">mod_cgi</a></code>, and will only be available if this
 
156
    module is loaded.</p>
 
157
 
 
158
    <h3><a name="element.config" id="element.config">The config Element</a></h3>
 
159
      <p>This command controls various aspects of the parsing. The
 
160
      valid attributes are:</p>
 
161
 
 
162
      <dl>
 
163
      <dt><code>echomsg</code> (<em>Apache 2.1 and later</em>)</dt>
 
164
      <dd>The value is a message that is sent back to the
 
165
      client if the <code><a href="#element.echo">echo</a></code> element
 
166
      attempts to echo an undefined variable. This overrides any <code class="directive"><a href="#ssiundefinedecho">SSIUndefinedEcho</a></code> directives.</dd>
 
167
 
 
168
      <dt><code>errmsg</code></dt>
 
169
      <dd>The value is a message that is sent back to the
 
170
      client if an error occurs while parsing the
 
171
      document. This overrides any <code class="directive"><a href="#ssierrormsg">SSIErrorMsg</a></code> directives.</dd>
 
172
 
 
173
      <dt><code>sizefmt</code></dt>
 
174
      <dd>The value sets the format to be used which displaying
 
175
      the size of a file. Valid values are <code>bytes</code>
 
176
      for a count in bytes, or <code>abbrev</code> for a count
 
177
      in Kb or Mb as appropriate, for example a size of 1024 bytes
 
178
      will be printed as "1K".</dd>
 
179
 
 
180
      <dt><code>timefmt</code></dt>
 
181
      <dd>The value is a string to be used by the
 
182
      <code>strftime(3)</code> library routine when printing
 
183
      dates.</dd>
 
184
      </dl>
 
185
     
 
186
 
 
187
    <h3><a name="element.echo" id="element.echo">The echo Element</a></h3>
 
188
      <p>This command prints one of the <a href="#includevars">include
 
189
      variables</a>, defined below. If the variable is unset, the result is
 
190
      determined by the <code class="directive"><a href="#ssiundefinedecho">SSIUndefinedEcho</a></code> directive. Any dates printed are
 
191
      subject to the currently configured <code>timefmt</code>.</p>
 
192
 
 
193
      <p>Attributes:</p> 
 
194
 
 
195
      <dl>
 
196
      <dt><code>var</code></dt>
 
197
      <dd>The value is the name of the variable to print.</dd>
 
198
 
 
199
      <dt><code>encoding</code></dt>
 
200
      <dd><p>Specifies how Apache should encode special characters
 
201
      contained in the variable before outputting them. If set
 
202
      to <code>none</code>, no encoding will be done. If set to
 
203
      <code>url</code>, then URL encoding (also known as %-encoding;
 
204
      this is appropriate for use within URLs in links, etc.) will be
 
205
      performed. At the start of an <code>echo</code> element,
 
206
      the default is set to <code>entity</code>, resulting in entity
 
207
      encoding (which is appropriate in the context of a block-level
 
208
      HTML element, <em>e.g.</em> a paragraph of text). This can be
 
209
      changed by adding an <code>encoding</code> attribute, which will
 
210
      remain in effect until the next <code>encoding</code> attribute
 
211
      is encountered or the element ends, whichever comes first.</p>
 
212
 
 
213
      <p>The <code>encoding</code> attribute must <em>precede</em> the
 
214
      corresponding <code>var</code> attribute to be effective, and 
 
215
      only special characters as defined in the ISO-8859-1 character
 
216
      encoding will be encoded. This encoding process may not have the
 
217
      desired result if a different character encoding is in use.</p>
 
218
 
 
219
      <div class="warning">
 
220
        In order to avoid cross-site scripting issues, you should
 
221
        <em>always</em> encode user supplied data.
 
222
      </div>
 
223
      </dd>
 
224
      </dl>
 
225
     
 
226
 
 
227
    <h3><a name="element.exec" id="element.exec">The exec Element</a></h3>
 
228
      <p>The <code>exec</code> command executes a given shell command or
 
229
      CGI script. It requires <code class="module"><a href="../mod/mod_cgi.html">mod_cgi</a></code> to be present
 
230
      in the server. If <code class="directive"><a href="../mod/core.html#options">Options</a></code>
 
231
      <code>IncludesNOEXEC</code> is set, this command is completely
 
232
      disabled. The valid attributes are:</p>
 
233
 
 
234
      <dl>
 
235
      <dt><code>cgi</code></dt>
 
236
      <dd><p>The value specifies a (%-encoded) URL-path to
 
237
      the CGI script. If the path does not begin with a slash (/),
 
238
      then it is taken to be relative to the current
 
239
      document. The document referenced by this path is
 
240
      invoked as a CGI script, even if the server would not
 
241
      normally recognize it as such. However, the directory
 
242
      containing the script must be enabled for CGI scripts
 
243
      (with <code class="directive"><a href="../mod/mod_alias.html#scriptalias">ScriptAlias</a></code>
 
244
      or <code class="directive"><a href="../mod/core.html#options">Options</a></code>
 
245
      <code>ExecCGI</code>).</p>
 
246
 
 
247
      <p>The CGI script is given the <code>PATH_INFO</code> and query
 
248
      string (<code>QUERY_STRING</code>) of the original request from the
 
249
      client; these <em>cannot</em> be specified in the URL path. The
 
250
      include variables will be available to the script in addition to
 
251
      the standard <a href="mod_cgi.html">CGI</a> environment.</p>
 
252
 
 
253
      <div class="example"><h3>Example</h3><p><code>
 
254
        &lt;!--#exec cgi="/cgi-bin/example.cgi" --&gt;
 
255
      </code></p></div>
 
256
 
 
257
      <p>If the script returns a <code>Location:</code> header instead of
 
258
      output, then this will be translated into an HTML anchor.</p>
 
259
 
 
260
      <p>The <code><a href="#includevirtual">include virtual</a></code>
 
261
      element should be used in preference to <code>exec cgi</code>. In
 
262
      particular, if you need to pass additional arguments to a CGI program,
 
263
      using the query string, this cannot be done with <code>exec
 
264
      cgi</code>, but can be done with <code>include virtual</code>, as
 
265
      shown here:</p>
 
266
 
 
267
      <div class="example"><p><code>
 
268
        &lt;!--#include virtual="/cgi-bin/example.cgi?argument=value" --&gt;
 
269
      </code></p></div>
 
270
      </dd>
 
271
 
 
272
      <dt><code>cmd</code></dt>
 
273
      <dd><p>The server will execute the given string using
 
274
      <code>/bin/sh</code>. The <a href="#includevars">include variables</a> are available to the command, in addition
 
275
      to the usual set of CGI variables.</p>
 
276
 
 
277
      <p>The use of <code><a href="#includevirtual">#include virtual</a></code> is almost always prefered to using
 
278
      either <code>#exec cgi</code> or <code>#exec cmd</code>. The former
 
279
      (<code>#include virtual</code>) uses the standard Apache sub-request
 
280
      mechanism to include files or scripts. It is much better tested and
 
281
      maintained.</p>
 
282
 
 
283
      <p>In addition, on some platforms, like Win32, and on unix when
 
284
      using <a href="../suexec.html">suexec</a>, you cannot pass arguments
 
285
      to a command in an <code>exec</code> directive, or otherwise include
 
286
      spaces in the command. Thus, while the following will work under a
 
287
      non-suexec configuration on unix, it will not produce the desired
 
288
      result under Win32, or when running suexec:</p>
 
289
 
 
290
      <div class="example"><p><code>
 
291
        &lt;!--#exec cmd="perl /path/to/perlscript arg1 arg2" --&gt;
 
292
      </code></p></div>
 
293
      </dd>
 
294
      </dl>
 
295
     
 
296
 
 
297
    <h3><a name="element.fsize" id="element.fsize">The fsize Element</a></h3>
 
298
      <p>This command prints the size of the specified file, subject
 
299
      to the <code>sizefmt</code> format specification. Attributes:</p>
 
300
 
 
301
      <dl>
 
302
      <dt><code>file</code></dt>
 
303
      <dd>The value is a path relative to the directory
 
304
      containing the current document being parsed.</dd>
 
305
 
 
306
      <dt><code>virtual</code></dt>
 
307
      <dd>The value is a (%-encoded) URL-path. If it does not begin with
 
308
      a slash (/) then it is taken to be relative to the current document.
 
309
      Note, that this does <em>not</em> print the size of any CGI output,
 
310
      but the size of the CGI script itself.</dd>
 
311
      </dl>
 
312
     
 
313
 
 
314
    <h3><a name="element.flastmod" id="element.flastmod">The flastmod Element</a></h3>
 
315
      <p>This command prints the last modification date of the
 
316
      specified file, subject to the <code>timefmt</code> format
 
317
      specification. The attributes are the same as for the
 
318
      <code><a href="#element.fsize">fsize</a></code> command.</p>
 
319
     
 
320
 
 
321
    <h3><a name="element.include" id="element.include">The include Element</a></h3>
 
322
      <p>This command inserts the text of another document or file
 
323
      into the parsed file. Any included file is subject to the usual
 
324
      access control. If the directory containing the parsed file has
 
325
      <a href="core.html#options">Options</a>
 
326
      <code>IncludesNOEXEC</code> set, then only documents with a text
 
327
      <a class="glossarylink" href="../glossary.html#mime-type" title="see glossary">MIME-type</a> (<code>text/plain</code>,
 
328
      <code>text/html</code> etc.) will be included. Otherwise CGI
 
329
      scripts are invoked as normal using the complete URL given in
 
330
      the command, including any query string.</p>
 
331
 
 
332
      <p>An attribute defines the location of the document; the
 
333
      inclusion is done for each attribute given to the include
 
334
      command. The valid attributes are:</p>
 
335
 
 
336
      <dl>
 
337
      <dt><code>file</code></dt>
 
338
      <dd>The value is a path relative to the directory
 
339
      containing the current document being parsed. It cannot
 
340
      contain <code>../</code>, nor can it be an absolute path.
 
341
      Therefore, you cannot include files that are outside of the
 
342
      document root, or above the current document in the directory
 
343
      structure. The <code>virtual</code> attribute should always be
 
344
      used in preference to this one.</dd>
 
345
 
 
346
      <dt><code><a id="includevirtual" name="includevirtual">virtual</a></code></dt>
 
347
      <dd><p>The value is a (%-encoded) URL-path. The URL cannot contain a
 
348
      scheme or hostname, only a path and an optional query string. If it
 
349
      does not begin with a slash (/) then it is taken to be relative to the
 
350
      current document.</p>
 
351
 
 
352
      <p>A URL is constructed from the attribute, and the output the
 
353
      server would return if the URL were accessed by the client is
 
354
      included in the parsed output. Thus included files can be nested.</p>
 
355
 
 
356
      <p>If the specified URL is a CGI program, the program will be
 
357
      executed and its output inserted in place of the directive in the
 
358
      parsed file. You may include a query string in a CGI url:</p>
 
359
     
 
360
      <div class="example"><p><code>
 
361
        &lt;!--#include virtual="/cgi-bin/example.cgi?argument=value" --&gt;
 
362
      </code></p></div>
 
363
           
 
364
      <p><code>include virtual</code> should be used in preference
 
365
      to <code>exec cgi</code> to include the output of CGI programs
 
366
      into an HTML document.</p>
 
367
      </dd>
 
368
      </dl>
 
369
     
 
370
 
 
371
    <h3><a name="element.printenv" id="element.printenv">The printenv Element</a></h3>
 
372
      <p>This prints out a listing of all existing variables and
 
373
      their values. Special characters are entity encoded (see the <code><a href="#element.echo">echo</a></code> element for details)
 
374
      before being output. There are no attributes.</p>
 
375
 
 
376
      <div class="example"><h3>Example</h3><p><code>
 
377
        &lt;!--#printenv --&gt;
 
378
      </code></p></div>
 
379
     
 
380
 
 
381
    <h3><a name="element.set" id="element.set">The set Element</a></h3>
 
382
      <p>This sets the value of a variable. Attributes:</p>
 
383
 
 
384
      <dl>
 
385
      <dt><code>var</code></dt>
 
386
      <dd>The name of the variable to set.</dd>
 
387
 
 
388
      <dt><code>value</code></dt>
 
389
      <dd>The value to give a variable.</dd>
 
390
      </dl>
 
391
 
 
392
      <div class="example"><h3>Example</h3><p><code>
 
393
        &lt;!--#set var="category" value="help" --&gt;
 
394
      </code></p></div>
 
395
     
 
396
</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
 
397
<div class="section">
 
398
<h2><a name="includevars" id="includevars">Include Variables</a></h2>
 
399
    
 
400
 
 
401
    <p>In addition to the variables in the standard CGI environment,
 
402
    these are available for the <code>echo</code> command, for
 
403
    <code>if</code> and <code>elif</code>, and to any program
 
404
    invoked by the document.</p>
 
405
 
 
406
    <dl>
 
407
      <dt><code>DATE_GMT</code></dt>
 
408
      <dd>The current date in Greenwich Mean Time.</dd>
 
409
 
 
410
      <dt><code>DATE_LOCAL</code></dt>
 
411
      <dd>The current date in the local time zone.</dd>
 
412
 
 
413
      <dt><code>DOCUMENT_NAME</code></dt>
 
414
      <dd>The filename (excluding directories) of the document
 
415
      requested by the user.</dd>
 
416
 
 
417
      <dt><code>DOCUMENT_URI</code></dt>
 
418
      <dd>The (%-decoded) URL path of the document requested by the
 
419
      user. Note that in the case of nested include files, this is
 
420
      <em>not</em> the URL for the current document.</dd>
 
421
 
 
422
      <dt><code>LAST_MODIFIED</code></dt>
 
423
      <dd>The last modification date of the document requested by
 
424
      the user.</dd>
 
425
 
 
426
      <dt><code>QUERY_STRING_UNESCAPED</code></dt>
 
427
      <dd>If a query string is present, this variable contains the
 
428
      (%-decoded) query string, which is <em>escaped</em> for shell
 
429
      usage (special characters like <code>&amp;</code> etc. are
 
430
      preceded by backslashes).</dd>
 
431
    </dl>
 
432
</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
 
433
<div class="section">
 
434
<h2><a name="substitution" id="substitution">Variable Substitution</a></h2>
 
435
 
 
436
    <p>Variable substitution is done within quoted strings in most
 
437
    cases where they may reasonably occur as an argument to an SSI
 
438
    directive. This includes the <code>config</code>,
 
439
    <code>exec</code>, <code>flastmod</code>, <code>fsize</code>,
 
440
    <code>include</code>, <code>echo</code>, and <code>set</code>
 
441
    directives, as well as the arguments to conditional operators.
 
442
    You can insert a literal dollar sign into the string using backslash
 
443
    quoting:</p>
 
444
 
 
445
    <div class="example"><p><code>
 
446
      &lt;!--#if expr="$a = \$test" --&gt;
 
447
    </code></p></div>
 
448
 
 
449
    <p>If a variable reference needs to be substituted in the
 
450
    middle of a character sequence that might otherwise be
 
451
    considered a valid identifier in its own right, it can be
 
452
    disambiguated by enclosing the reference in braces,
 
453
    <em>a la</em> shell substitution:</p>
 
454
 
 
455
    <div class="example"><p><code>
 
456
      &lt;!--#set var="Zed" value="${REMOTE_HOST}_${REQUEST_METHOD}" --&gt;
 
457
    </code></p></div>
 
458
 
 
459
    <p>This will result in the <code>Zed</code> variable being set
 
460
    to "<code>X_Y</code>" if <code>REMOTE_HOST</code> is
 
461
    "<code>X</code>" and <code>REQUEST_METHOD</code> is
 
462
    "<code>Y</code>".</p>
 
463
 
 
464
    <p>The below example will print "in foo" if the
 
465
    <code>DOCUMENT_URI</code> is <code>/foo/file.html</code>, "in bar"
 
466
    if it is <code>/bar/file.html</code> and "in neither" otherwise:</p>
 
467
 
 
468
    <div class="example"><p><code>
 
469
      &lt;!--#if expr='"$DOCUMENT_URI" = "/foo/file.html"' --&gt;<br />
 
470
      <span class="indent">
 
471
        in foo<br />
 
472
      </span>
 
473
      &lt;!--#elif expr='"$DOCUMENT_URI" = "/bar/file.html"' --&gt;<br />
 
474
      <span class="indent">
 
475
        in bar<br />
 
476
      </span>
 
477
      &lt;!--#else --&gt;<br />
 
478
      <span class="indent">
 
479
        in neither<br />
 
480
      </span>
 
481
      &lt;!--#endif --&gt;
 
482
    </code></p></div>
 
483
</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
 
484
<div class="section">
 
485
<h2><a name="flowctrl" id="flowctrl">Flow Control Elements</a></h2>
 
486
    
 
487
 
 
488
    <p>The basic flow control elements are:</p>
 
489
 
 
490
    <div class="example"><p><code>
 
491
      &lt;!--#if expr="<var>test_condition</var>" --&gt;<br />
 
492
      &lt;!--#elif expr="<var>test_condition</var>" --&gt;<br />
 
493
      &lt;!--#else --&gt;<br />
 
494
      &lt;!--#endif --&gt;
 
495
    </code></p></div>
 
496
 
 
497
    <p>The <code>if</code> element works like an if statement in a
 
498
    programming language. The test condition is evaluated and if
 
499
    the result is true, then the text until the next <code>elif</code>,
 
500
    <code>else</code> or <code>endif</code> element is included in the
 
501
    output stream.</p>
 
502
 
 
503
    <p>The <code>elif</code> or <code>else</code> statements are be used
 
504
    to put text into the output stream if the original
 
505
    <var>test_condition</var> was false. These elements are optional.</p>
 
506
 
 
507
    <p>The <code>endif</code> element ends the <code>if</code> element
 
508
    and is required.</p>
 
509
 
 
510
    <p><var>test_condition</var> is one of the following:</p>
 
511
 
 
512
    <dl>
 
513
      <dt><code><var>string</var></code></dt>
 
514
      <dd>true if <var>string</var> is not empty</dd>
 
515
 
 
516
      <dt><code><var>string1</var> = <var>string2</var><br />
 
517
      <var>string1</var> == <var>string2</var><br />
 
518
      <var>string1</var> != <var>string2</var></code></dt>
 
519
      
 
520
      <dd><p>Compare <var>string1</var> with <var>string2</var>. If
 
521
      <var>string2</var> has the form <code>/<var>string2</var>/</code>
 
522
      then it is treated as a regular expression. Regular expressions are
 
523
      implemented by the <a href="http://www.pcre.org">PCRE</a> engine and
 
524
      have the same syntax as those in <a href="http://www.perl.com">perl
 
525
      5</a>. Note that <code>==</code> is just an alias for <code>=</code>
 
526
      and behaves exactly the same way.</p>
 
527
 
 
528
      <p>If you are matching positive (<code>=</code> or <code>==</code>), you
 
529
      can capture grouped parts of the regular expression. The captured parts
 
530
      are stored in the special variables <code>$1</code> ..
 
531
      <code>$9</code>.</p>
 
532
 
 
533
      <div class="example"><h3>Example</h3><p><code>
 
534
        &lt;!--#if expr="$QUERY_STRING = /^sid=([a-zA-Z0-9]+)/" --&gt;<br />
 
535
        <span class="indent">
 
536
          &lt;!--#set var="session" value="$1" --&gt;<br />
 
537
        </span>
 
538
        &lt;!--#endif --&gt;
 
539
      </code></p></div>
 
540
      </dd>
 
541
 
 
542
      <dt><code><var>string1</var> &lt; <var>string2</var><br />
 
543
       <var>string1</var> &lt;= <var>string2</var><br />
 
544
       <var>string1</var> &gt; <var>string2</var><br />
 
545
       <var>string1</var> &gt;= <var>string2</var></code></dt>
 
546
 
 
547
      <dd>Compare <var>string1</var> with <var>string2</var>. Note, that
 
548
      strings are compared <em>literally</em> (using
 
549
      <code>strcmp(3)</code>). Therefore the string "100" is less than
 
550
      "20".</dd>
 
551
 
 
552
      <dt><code>( <var>test_condition</var> )</code></dt>
 
553
      <dd>true if <var>test_condition</var> is true</dd>
 
554
 
 
555
      <dt><code>! <var>test_condition</var></code></dt>
 
556
      <dd>true if <var>test_condition</var> is false</dd>
 
557
 
 
558
      <dt><code><var>test_condition1</var> &amp;&amp;
 
559
        <var>test_condition2</var></code></dt>
 
560
      <dd>true if both <var>test_condition1</var> and
 
561
      <var>test_condition2</var> are true</dd>
 
562
 
 
563
      <dt><code><var>test_condition1</var> ||
 
564
        <var>test_condition2</var></code></dt>
 
565
      <dd>true if either <var>test_condition1</var> or
 
566
      <var>test_condition2</var> is true</dd>
 
567
    </dl>
 
568
 
 
569
    <p>"<code>=</code>" and "<code>!=</code>" bind more tightly than
 
570
    "<code>&amp;&amp;</code>" and "<code>||</code>". "<code>!</code>" binds
 
571
    most tightly. Thus, the following are equivalent:</p>
 
572
 
 
573
    <div class="example"><p><code>
 
574
      &lt;!--#if expr="$a = test1 &amp;&amp; $b = test2" --&gt;<br />
 
575
      &lt;!--#if expr="($a = test1) &amp;&amp; ($b = test2)" --&gt;
 
576
    </code></p></div>
 
577
 
 
578
    <p>The boolean operators <code>&amp;&amp;</code> and <code>||</code>
 
579
    share the same priority. So if you want to bind such an operator more
 
580
    tightly, you should use parentheses.</p>
 
581
 
 
582
    <p>Anything that's not recognized as a variable or an operator
 
583
    is treated as a string. Strings can also be quoted:
 
584
    <code>'string'</code>. Unquoted strings can't contain whitespace
 
585
    (blanks and tabs) because it is used to separate tokens such as
 
586
    variables. If multiple strings are found in a row, they are
 
587
    concatenated using blanks. So,</p>
 
588
 
 
589
    <div class="example"><p><code><var>string1</var>&nbsp;&nbsp;&nbsp;&nbsp;<var>string2</var></code> results in <code><var>string1</var>&nbsp;<var>string2</var></code><br />
 
590
      <br />
 
591
      and<br />
 
592
      <br />
 
593
      <code>'<var>string1</var>&nbsp;&nbsp;&nbsp;&nbsp;<var>string2</var>'</code> results in <code><var>string1</var>&nbsp;&nbsp;&nbsp;&nbsp;<var>string2</var></code>.</p></div>
 
594
 
 
595
    <div class="note"><h3>Optimization of Boolean Expressions</h3>
 
596
      <p>If the expressions become more complex and slow down processing
 
597
      significantly, you can try to optimize them according to the
 
598
      evaluation rules:</p>
 
599
      <ul>
 
600
      <li>Expressions are evaluated from left to right</li>
 
601
      <li>Binary boolean operators (<code>&amp;&amp;</code> and <code>||</code>)
 
602
          are short circuited wherever possible. In conclusion with the rule
 
603
          above that means, <code class="module"><a href="../mod/mod_include.html">mod_include</a></code> evaluates at first
 
604
          the left expression. If the left result is sufficient to determine
 
605
          the end result, processing stops here. Otherwise it evaluates the
 
606
          right side and computes the end result from both left and right
 
607
          results.</li>
 
608
      <li>Short circuit evaluation is turned off as long as there are regular
 
609
          expressions to deal with. These must be evaluated to fill in the
 
610
          backreference variables (<code>$1</code> .. <code>$9</code>).</li>
 
611
      </ul>
 
612
      <p>If you want to look how a particular expression is handled, you can
 
613
      recompile <code class="module"><a href="../mod/mod_include.html">mod_include</a></code> using the
 
614
      <code>-DDEBUG_INCLUDE</code> compiler option. This inserts for every
 
615
      parsed expression tokenizer information, the parse tree and how it is
 
616
      evaluated into the output sent to the client.</p>
 
617
    </div>
 
618
</div>
 
619
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
 
620
<div class="directive-section"><h2><a name="SSIEndTag" id="SSIEndTag">SSIEndTag</a> <a name="ssiendtag" id="ssiendtag">Directive</a></h2>
 
621
<table class="directive">
 
622
<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>String that ends an include element</td></tr>
 
623
<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>SSIEndTag <var>tag</var></code></td></tr>
 
624
<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>SSIEndTag "--&gt;"</code></td></tr>
 
625
<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
 
626
<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
 
627
<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_include</td></tr>
 
628
<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>Available in version 2.0.30 and later.</td></tr>
 
629
</table>
 
630
    <p>This directive changes the string that <code class="module"><a href="../mod/mod_include.html">mod_include</a></code>
 
631
    looks for to mark the end of an include element.</p>
 
632
 
 
633
    <div class="example"><h3>Example</h3><p><code>
 
634
      SSIEndTag "%&gt;"
 
635
    </code></p></div>
 
636
 
 
637
 
 
638
<h3>See also</h3>
 
639
<ul>
 
640
<li><code class="directive"><a href="#ssistarttag">SSIStartTag</a></code></li>
 
641
</ul>
 
642
</div>
 
643
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
 
644
<div class="directive-section"><h2><a name="SSIErrorMsg" id="SSIErrorMsg">SSIErrorMsg</a> <a name="ssierrormsg" id="ssierrormsg">Directive</a></h2>
 
645
<table class="directive">
 
646
<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Error message displayed when there is an SSI
 
647
error</td></tr>
 
648
<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>SSIErrorMsg <var>message</var></code></td></tr>
 
649
<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>SSIErrorMsg "[an error occurred while processing this
 
650
directive]"</code></td></tr>
 
651
<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
 
652
<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>All</td></tr>
 
653
<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
 
654
<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_include</td></tr>
 
655
<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>Available in version 2.0.30 and later.</td></tr>
 
656
</table>
 
657
    <p>The <code class="directive">SSIErrorMsg</code> directive changes the error
 
658
    message displayed when <code class="module"><a href="../mod/mod_include.html">mod_include</a></code> encounters an
 
659
    error. For production servers you may consider changing the default
 
660
    error message to <code>"&lt;!-- Error --&gt;"</code> so that
 
661
    the message is not presented to the user.</p>
 
662
 
 
663
    <p>This directive has the same effect as the <code>&lt;!--#config
 
664
    errmsg=<var>message</var> --&gt;</code> element.</p>
 
665
 
 
666
    <div class="example"><h3>Example</h3><p><code>
 
667
      SSIErrorMsg "&lt;!-- Error --&gt;"
 
668
    </code></p></div>
 
669
 
 
670
</div>
 
671
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
 
672
<div class="directive-section"><h2><a name="SSIStartTag" id="SSIStartTag">SSIStartTag</a> <a name="ssistarttag" id="ssistarttag">Directive</a></h2>
 
673
<table class="directive">
 
674
<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>String that starts an include element</td></tr>
 
675
<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>SSIStartTag <var>tag</var></code></td></tr>
 
676
<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>SSIStartTag "&lt;!--#"</code></td></tr>
 
677
<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host</td></tr>
 
678
<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
 
679
<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_include</td></tr>
 
680
<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>Available in version 2.0.30 and later.</td></tr>
 
681
</table>
 
682
    <p>This directive changes the string that <code class="module"><a href="../mod/mod_include.html">mod_include</a></code>
 
683
    looks for to mark an include element to process.</p>
 
684
 
 
685
    <p>You may want to use this option if you have 2 servers parsing the
 
686
    output of a file each processing different commands (possibly at
 
687
    different times).</p> 
 
688
 
 
689
    <div class="example"><h3>Example</h3><p><code>
 
690
      SSIStartTag "&lt;%"<br />
 
691
      SSIEndTag   "%&gt;"
 
692
    </code></p></div>
 
693
 
 
694
    <p>The example given above, which also specifies a matching
 
695
    <code class="directive"><a href="#ssiendtag">SSIEndTag</a></code>, will 
 
696
    allow you to use SSI directives as shown in the example 
 
697
    below:</p>
 
698
 
 
699
    <div class="example"><h3>SSI directives with alternate start and end tags</h3><p><code>
 
700
      &lt;%printenv %&gt;
 
701
    </code></p></div>
 
702
 
 
703
<h3>See also</h3>
 
704
<ul>
 
705
<li><code class="directive"><a href="#ssiendtag">SSIEndTag</a></code></li>
 
706
</ul>
 
707
</div>
 
708
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
 
709
<div class="directive-section"><h2><a name="SSITimeFormat" id="SSITimeFormat">SSITimeFormat</a> <a name="ssitimeformat" id="ssitimeformat">Directive</a></h2>
 
710
<table class="directive">
 
711
<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Configures the format in which date strings are
 
712
displayed</td></tr>
 
713
<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>SSITimeFormat <var>formatstring</var></code></td></tr>
 
714
<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>SSITimeFormat "%A, %d-%b-%Y %H:%M:%S %Z"</code></td></tr>
 
715
<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
 
716
<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>All</td></tr>
 
717
<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
 
718
<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_include</td></tr>
 
719
<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>Available in version 2.0.30 and later.</td></tr>
 
720
</table>
 
721
<p>This directive changes the format in which date strings are displayed 
 
722
    when echoing <code>DATE</code> environment variables. The
 
723
    <var>formatstring</var> is as in <code>strftime(3)</code> from the
 
724
    C standard library.</p>
 
725
 
 
726
    <p>This directive has the same effect as the <code>&lt;!--#config
 
727
    timefmt=<var>formatstring</var> --&gt;</code> element.</p>
 
728
 
 
729
    <div class="example"><h3>Example</h3><p><code>
 
730
      SSITimeFormat "%R, %B %d, %Y"
 
731
    </code></p></div>
 
732
 
 
733
    <p>The above directive would cause times to be displayed in the
 
734
    format "22:26, June 14, 2002".</p>
 
735
 
 
736
</div>
 
737
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
 
738
<div class="directive-section"><h2><a name="SSIUndefinedEcho" id="SSIUndefinedEcho">SSIUndefinedEcho</a> <a name="ssiundefinedecho" id="ssiundefinedecho">Directive</a></h2>
 
739
<table class="directive">
 
740
<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>String displayed when an unset variable is echoed</td></tr>
 
741
<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>SSIUndefinedEcho <var>string</var></code></td></tr>
 
742
<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>SSIUndefinedEcho "(none)"</code></td></tr>
 
743
<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
 
744
<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>All</td></tr>
 
745
<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
 
746
<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_include</td></tr>
 
747
<tr><th><a href="directive-dict.html#Compatibility">Compatibility:</a></th><td>Available in version 2.0.34 and later.</td></tr>
 
748
</table>
 
749
    <p>This directive changes the string that <code class="module"><a href="../mod/mod_include.html">mod_include</a></code>
 
750
    displays when a variable is not set and "echoed".</p>
 
751
 
 
752
    <div class="example"><h3>Example</h3><p><code>
 
753
      SSIUndefinedEcho "&lt;!-- undef --&gt;"
 
754
    </code></p></div>
 
755
 
 
756
</div>
 
757
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
 
758
<div class="directive-section"><h2><a name="XBitHack" id="XBitHack">XBitHack</a> <a name="xbithack" id="xbithack">Directive</a></h2>
 
759
<table class="directive">
 
760
<tr><th><a href="directive-dict.html#Description">Description:</a></th><td>Parse SSI directives in files with the execute bit
 
761
set</td></tr>
 
762
<tr><th><a href="directive-dict.html#Syntax">Syntax:</a></th><td><code>XBitHack on|off|full</code></td></tr>
 
763
<tr><th><a href="directive-dict.html#Default">Default:</a></th><td><code>XBitHack off</code></td></tr>
 
764
<tr><th><a href="directive-dict.html#Context">Context:</a></th><td>server config, virtual host, directory, .htaccess</td></tr>
 
765
<tr><th><a href="directive-dict.html#Override">Override:</a></th><td>Options</td></tr>
 
766
<tr><th><a href="directive-dict.html#Status">Status:</a></th><td>Base</td></tr>
 
767
<tr><th><a href="directive-dict.html#Module">Module:</a></th><td>mod_include</td></tr>
 
768
</table>
 
769
    <p>The <code class="directive">XBitHack</code> directive controls the parsing
 
770
    of ordinary html documents. This directive only affects files associated
 
771
    with the <a class="glossarylink" href="../glossary.html#mime-type" title="see glossary">MIME-type</a> <code>text/html</code>. <code class="directive">XBitHack</code> can take on the following values:</p>
 
772
 
 
773
    <dl>
 
774
      <dt><code>off</code></dt>
 
775
      <dd>No special treatment of executable files.</dd>
 
776
 
 
777
      <dt><code>on</code></dt>
 
778
      <dd>Any <code>text/html</code> file that has the user-execute bit
 
779
      set will be treated as a server-parsed html document.</dd>
 
780
 
 
781
      <dt><code>full</code></dt>
 
782
      <dd>As for <code>on</code> but also test the group-execute bit.
 
783
      If it is set, then set the <code>Last-modified</code> date of the
 
784
      returned file to be the last modified time of the file. If
 
785
      it is not set, then no last-modified date is sent. Setting
 
786
      this bit allows clients and proxies to cache the result of
 
787
      the request. 
 
788
 
 
789
      <div class="note"><h3>Note</h3>
 
790
      <p>You would not want to use the full option, unless you assure the
 
791
      group-execute bit is unset for every SSI script which might <code>#include</code> a CGI or otherwise produces different output on
 
792
      each hit (or could potentially change on subsequent requests).</p>
 
793
      </div>
 
794
      </dd>
 
795
    </dl>
 
796
 
 
797
    
 
798
</div>
 
799
</div>
 
800
<div class="bottomlang">
 
801
<p><span>Available Languages: </span><a href="../en/mod/mod_include.html" title="English">&nbsp;en&nbsp;</a> |
 
802
<a href="../ja/mod/mod_include.html" hreflang="ja" rel="alternate" title="Japanese">&nbsp;ja&nbsp;</a></p>
 
803
</div><div id="footer">
 
804
<p class="apache">Copyright 2006 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>
 
805
<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p></div>
 
806
</body></html>
 
 
b'\\ No newline at end of file'