bottleneck testcase based on rubbos
[bottlenecks.git] / rubbos / app / apache2 / manual / misc / custom_errordocs.html.en
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>International Customized Server Error Messages - 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 id="manual-page"><div id="page-header">
14 <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>
15 <p class="apache">Apache HTTP Server Version 2.0</p>
16 <img alt="" src="../images/feather.gif" /></div>
17 <div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
18 <div id="path">
19 <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.0</a> &gt; <a href="./">Miscellaneous Documentation</a></div><div id="page-content"><div id="preamble"><h1>International Customized Server Error Messages</h1>
20 <div class="toplang">
21 <p><span>Available Languages: </span><a href="../en/misc/custom_errordocs.html" title="English">&nbsp;en&nbsp;</a></p>
22 </div>
23
24
25     <div class="warning"><h3>Warning:</h3>
26       <p>This document has not been fully updated
27       to take into account changes made in the 2.0 version of the
28       Apache HTTP Server. Some of the information may still be
29       relevant, but please use it with care.</p>
30     </div>
31
32     <p>This document describes an easy way to provide your Apache
33     HTTP Server with a set of customized error messages which take
34     advantage of <a href="../content-negotiation.html">Content
35     Negotiation</a> and <code class="module"><a href="../mod/mod_include.html">mod_include</a></code> to return 
36     error messages generated by the server in the client's native
37     language.</p>
38   
39   </div>
40 <div id="quickview"><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#intro">Introduction</a></li>
41 <li><img alt="" src="../images/down.gif" /> <a href="#createdir">Creating an ErrorDocument directory</a></li>
42 <li><img alt="" src="../images/down.gif" /> <a href="#proxy">Customizing Proxy Error Messages</a></li>
43 <li><img alt="" src="../images/down.gif" /> <a href="#listings">HTML Listing of the Discussed Example</a></li>
44 </ul></div>
45 <div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
46 <div class="section">
47 <h2><a name="intro" id="intro">Introduction</a></h2>
48
49     
50
51     <p>By using SSI, all <code class="directive"><a href="../mod/core.html#errordocument">ErrorDocument</a></code> messages
52     can share a homogenous and consistent style and layout, and
53     maintenance work (changing images, changing links) is kept to a
54     minimum because all layout information can be kept in a single
55     file.</p>
56
57     <p>Error documents can be shared across different servers, or
58     even hosts, because all varying information is inserted at the
59     time the error document is returned on behalf of a failed
60     request.</p>
61
62     <p>Content Negotiation then selects the appropriate language
63     version of a particular error message text, honoring the
64     language preferences passed in the client's request. (Users
65     usually select their favorite languages in the preferences
66     options menu of today's browsers). When an error document in
67     the client's primary language version is unavailable, the
68     secondary languages are tried or a default (fallback) version
69     is used.</p>
70
71     <p>You have full flexibility in designing your error documents
72     to your personal taste (or your company's conventions). For
73     demonstration purposes, we present a simple generic error
74     document scheme. For this hypothetic server, we assume that all
75     error messages...</p>
76
77     <ul>
78       <li>possibly are served by different virtual hosts (different
79       host name, different IP address, or different port) on the
80       server machine,</li>
81
82       <li>show a predefined company logo in the right top of the
83       message (selectable by virtual host),</li>
84
85       <li>print the error title first, followed by an explanatory
86       text and (depending on the error context) help on how to
87       resolve the error,</li>
88
89       <li>have some kind of standardized background image,</li>
90
91       <li>display an apache logo and a feedback email address at
92       the bottom of the error message.</li>
93     </ul>
94
95     <p>An example of a "document not found" message for a german
96     client might look like this:</p>
97
98     <p><img src="../images/custom_errordocs.gif" alt="[Needs graphics capability to display]" /></p>
99     
100     <p>All links in the document as well as links to the server's
101     administrator mail address, and even the name and port of the
102     serving virtual host are inserted in the error document at
103     "run-time", i.e., when the error actually occurs.</p>
104   </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
105 <div class="section">
106 <h2><a name="createdir" id="createdir">Creating an ErrorDocument directory</a></h2>
107
108     
109
110     <p>For this concept to work as easily as possible, we must take
111     advantage of as much server support as we can get:</p>
112
113     <ol>
114       <li>By defining the MultiViews <code class="directive"><a href="../mod/core.html#options">Options</a></code>, we
115       enable the language selection of the most appropriate
116       language alternative (content negotiation).</li>
117
118       <li>By setting the <code class="directive"><a href="../mod/mod_negotiation.html#languagepriority">LanguagePriority</a></code>
119       directive we define a set of default fallback languages in
120       the situation where the client's browser did not express any
121       preference at all.</li>
122
123       <li>By enabling <code class="module"><a href="../mod/mod_include.html">mod_include</a></code>
124       (and disallowing execution of cgi scripts for
125       security reasons), we allow the server to include building
126       blocks of the error message, and to substitute the value of
127       certain environment variables into the generated document
128       (dynamic HTML) or even to conditionally include or omit parts
129       of the text.</li>
130
131       <li>The <code class="directive"><a href="../mod/mod_mime.html#addhandler">AddHandler</a></code> and <code class="directive"><a href="../mod/mod_mime.html#addtype">AddType</a></code> directives
132       are useful for automatically SSI-expanding all files with a
133       <code>.shtml</code> suffix to <em>text/html</em>.</li>
134
135       <li>By using the <code class="directive"><a href="../mod/mod_alias.html#alias">Alias</a></code> directive, we
136       keep the error document directory outside of the document
137       tree because it can be regarded more as a server part than
138       part of the document tree.</li>
139
140       <li>The <code class="directive"><a href="../mod/core.html#directory">&lt;Directory&gt;</a></code> block
141       restricts these "special" settings to the error document
142       directory and avoids an impact on any of the settings for the
143       regular document tree.</li>
144
145       <li>For each of the error codes to be handled (see RFC2068
146       for an exact description of each error code, or look at
147       <code>src/main/http_protocol.c</code> if you wish to see
148       apache's standard messages), an <code class="directive"><a href="../mod/core.html#errordocument">ErrorDocument</a></code> in
149       the aliased <code>/errordocs</code> directory is defined.
150       Note that we only define the basename of the document here
151       because the MultiViews option will select the best candidate
152       based on the language suffixes and the client's preferences.
153       Any error situation with an error code <em>not</em> handled
154       by a custom document will be dealt with by the server in the
155       standard way (<em>i.e.</em>, a plain error message in
156       english).</li>
157
158       <li>Finally, the <code class="directive"><a href="../mod/core.html#allowoverride">AllowOverride</a></code> directive tells 
159       apache that it is not necessary to look for a .htaccess file 
160       in the /errordocs directory: a minor speed optimization.</li>
161     </ol>
162
163     <p>The resulting <code>httpd.conf</code> configuration would then
164     look similar to this:</p>
165
166     <div class="note"><h3>Note</h3>Note that you can define your own
167     error messages using this method for only part of the document
168     tree, e.g., a /~user/ subtree. In this case, the configuration
169     could as well be put into the .htaccess file at the root of the
170     subtree, and the &lt;Directory&gt; and &lt;/Directory&gt;
171     directives -but not the contained directives- must be
172     omitted.</div>
173
174 <div class="example"><p><code>
175   LanguagePriority en fr de <br />
176   Alias  /errordocs  /usr/local/apache/errordocs <br />
177   <br /> 
178   &lt;Directory /usr/local/apache/errordocs&gt; <br />
179   <span class="indent">
180     AllowOverride none <br />
181     Options MultiViews IncludesNoExec FollowSymLinks <br />
182     AddType text/html .shtml <br />
183     &lt;FilesMatch "\.shtml[.$]"&gt; <br />
184     <span class="indent">
185      SetOutputFilter INCLUDES <br />
186     </span>
187     &lt;/FilesMatch&gt; <br />
188    </span>
189    &lt;/Directory&gt; <br />
190   <br />
191   #    "400 Bad Request", <br />
192   ErrorDocument  400  /errordocs/400 <br />
193   #    "401 Authorization Required", <br />
194   ErrorDocument  401  /errordocs/401 <br />
195   #    "403 Forbidden", <br />
196   ErrorDocument  403  /errordocs/403 <br />
197   #    "404 Not Found", <br />
198   ErrorDocument  404  /errordocs/404 <br />
199   #    "500 Internal Server Error", <br />
200   ErrorDocument  500  /errordocs/500 <br />
201 </code></p></div>
202
203     <p>The directory for the error messages (here:
204     <code>/usr/local/apache/errordocs/</code>) must then be created
205     with the appropriate permissions (readable and executable by
206     the server uid or gid, only writable for the administrator).</p>
207
208     <h3><a name="naming" id="naming">Naming the Individual Error Document files</a></h3>
209
210     
211
212     <p>By defining the <code>MultiViews</code> option, the server was
213     told to automatically scan the directory for matching variants
214     (looking at language and content type suffixes) when a
215     requested document was not found. In the configuration, we
216     defined the names for the error documents to be just their
217     error number (without any suffix).</p>
218
219     <p>The names of the individual error documents are now
220     determined like this (I'm using 403 as an example, think of it
221     as a placeholder for any of the configured error
222     documents):</p>
223
224     <ul>
225       <li>No file errordocs/403 should exist. Otherwise, it would
226       be found and served (with the DefaultType, usually
227       text/plain), all negotiation would be bypassed.</li>
228
229       <li>For each language for which we have an internationalized
230       version (note that this need not be the same set of languages
231       for each error code - you can get by with a single language
232       version until you actually <em>have</em> translated
233       versions), a document
234       <code>errordocs/403.shtml.<em>lang</em></code> is created and
235       filled with the error text in that language (<a href="#createdocs">see below</a>).</li>
236
237       <li>One fallback document called
238       <code>errordocs/403.shtml</code> is created, usually by
239       creating a symlink to the default language variant (<a href="#fallback">see below</a>).</li>
240     </ul>
241     
242
243     <h3><a name="headfoot" id="headfoot">The Common Header and Footer Files</a></h3>
244
245     
246
247     <p>By putting as much layout information in two special "include
248     files", the error documents can be reduced to a bare minimum.</p>
249
250     <p>One of these layout files defines the HTML document header
251     and a configurable list of paths to the icons to be shown in
252     the resulting error document. These paths are exported as a set
253     of SSI environment variables and are later evaluated by the
254     "footer" special file. The title of the current error (which is
255     put into the TITLE tag and an H1 header) is simply passed in
256     from the main error document in a variable called
257     <code>title</code>.</p>
258     
259     <p><strong>By changing this file, the layout of all generated
260     error messages can be changed in a second.</strong> (By
261     exploiting the features of SSI, you can easily define
262     different layouts based on the current virtual host, or even
263     based on the client's domain name).</p>
264
265     <p>The second layout file describes the footer to be displayed
266     at the bottom of every error message. In this example, it shows
267     an apache logo, the current server time, the server version
268     string and adds a mail reference to the site's webmaster.</p>
269
270     <p>For simplicity, the header file is simply called
271     <code>head.shtml</code> because it contains server-parsed
272     content but no language specific information. The footer file
273     exists once for each language translation, plus a symlink for
274     the default language.</p>
275
276 <div class="example"><p><code>
277 for English, French and German versions (default english) <br />
278 <br />
279 foot.shtml.en, <br />
280 foot.shtml.fr, <br />
281 foot.shtml.de, <br />
282 foot.shtml symlink to <br />
283 foot.shtml.en
284 </code></p></div>
285
286     <p>Both files are included into the error document by using the
287     directives <code>&lt;!--#include virtual="head" --&gt;</code>
288     and <code>&lt;!--#include virtual="foot" --&gt;</code>
289     respectively: the rest of the magic occurs in mod_negotiation
290     and in mod_include.</p>
291
292     <p>See <a href="#listings">the listings below</a> to see an
293     actual HTML implementation of the discussed example.</p>
294     
295
296     <h3><a name="createdocs" id="createdocs">Creating ErrorDocuments in Different Languages</a></h3>
297
298     
299
300     <p>After all this preparation work, little remains to be said
301     about the actual documents. They all share a simple common
302     structure:</p>
303
304 <div class="example"><p><code>
305 &lt;!--#set var="title" value="<em>error description title</em>" --&gt; <br />
306 &lt;!--#include virtual="head" --&gt; <br />
307 <span class="indent">
308  <em>explanatory error text</em> <br />
309 </span>
310 &lt;!--#include virtual="foot" --&gt;
311 </code></p></div>
312
313     <p>In the <a href="#listings">listings section</a>, you can see an
314     example of a [400 Bad Request] error document. Documents as
315     simple as that certainly cause no problems to translate or
316     expand.</p>
317     
318
319     <h3><a name="fallback" id="fallback">The Fallback Language</a></h3>
320
321     
322
323     <p>Do we need a special handling for languages other than those we
324     have translations for? We did set the LanguagePriority, didn't
325     we?!</p>
326
327     <p>Well, the LanguagePriority directive is for the case where
328     the client does not express any language priority at all. But
329     what happens in the situation where the client wants one of the
330     languages we do not have, and none of those we do have?</p>
331
332     <p>Without doing anything, the Apache server will usually
333     return a [406 no acceptable variant] error, listing the choices
334     from which the client may select. But we're in an error message
335     already, and important error information might get lost when
336     the client had to choose a language representation first.</p>
337
338     <p>So, in this situation it appears to be easier to define a
339     fallback language (by copying or linking, <em>e.g.</em>, the
340     english version to a language-less version). Because the
341     negotiation algorithm prefers "more specialized" variants over
342     "more generic" variants, these generic alternatives will only
343     be chosen when the normal negotiation did not succeed.</p>
344
345     <p>A simple shell script to do it (execute within the
346     errordocs/ dir):</p>
347
348 <div class="example"><p><code>
349   for f in *.shtml.en <br />
350   do <br />
351   <span class="indent">
352      ln -s $f `basename $f .en` <br />
353   </span>
354   done
355 </code></p></div>
356
357     
358   </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
359 <div class="section">
360 <h2><a name="proxy" id="proxy">Customizing Proxy Error Messages</a></h2>
361
362   
363
364     <p>As of Apache-1.3, it is possible to use the
365     <code>ErrorDocument</code> mechanism for proxy error messages
366     as well (previous versions always returned fixed predefined
367     error messages).</p>
368
369     <p>Most proxy errors return an error code of [500 Internal
370     Server Error]. To find out whether a particular error document
371     was invoked on behalf of a proxy error or because of some other
372     server error, and what the reason for the failure was, you can
373     check the contents of the new <code>ERROR_NOTES</code> CGI
374     environment variable: if invoked for a proxy error, this
375     variable will contain the actual proxy error message text in
376     HTML form.</p>
377
378     <p>The following excerpt demonstrates how to exploit the
379     <code>ERROR_NOTES</code> variable within an error document:</p>
380
381 <div class="example"><p><code>
382  &lt;!--#if expr="$REDIRECT_ERROR_NOTES = ''" --&gt; <br />
383  <br />
384   &lt;p&gt; <br />
385   <span class="indent">
386    The server encountered an unexpected condition <br />
387    which prevented it from fulfilling the request. <br />
388   </span>
389   &lt;/p&gt; <br />
390 <br />
391   &lt;p&gt; <br />
392   <span class="indent">
393    &lt;a href="mailto:&lt;!--#echo var="SERVER_ADMIN" --&gt;" <br />
394     SUBJECT="Error message [&lt;!--#echo var="REDIRECT_STATUS" --&gt;] &lt;!--#echo var="title" --&gt; for &lt;!--#echo var="REQUEST_URI" --&gt;"&gt; <br />
395    Please forward this error screen to &lt;!--#echo var="SERVER_NAME" --&gt;'s <br />
396    WebMaster&lt;/a&gt;; it includes useful debugging information about <br />
397    the Request which caused the error. <br />
398 <br />
399    &lt;pre&gt;&lt;!--#printenv --&gt;&lt;/pre&gt; <br />
400   </span>
401   &lt;/p&gt; <br />
402  <br />
403  &lt;!--#else --&gt; <br />
404  <span class="indent">
405   &lt;!--#echo var="REDIRECT_ERROR_NOTES" --&gt;<br />
406  </span>
407 <br />
408  &lt;!--#endif --&gt;
409 </code></p></div>
410
411   </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
412 <div class="section">
413 <h2><a name="listings" id="listings">HTML Listing of the Discussed Example</a></h2>
414
415   
416
417     <p>So, to summarize our example, here's the complete listing of
418     the <code>400.shtml.en</code> document. You will notice that it
419     contains almost nothing but the error text (with conditional
420     additions). Starting with this example, you will find it easy
421     to add more error documents, or to translate the error
422     documents to different languages.</p>
423
424 <div class="example"><p><code>
425 &lt;!--#set var="title" value="Bad Request"--&gt; <br />
426 &lt;!--#include virtual="head" --&gt;<br />
427 <br />
428    &lt;p&gt; <br />
429    <span class="indent">
430    Your browser sent a request that this server could not understand: <br />
431    &lt;blockquote&gt; <br />
432      <span class="indent">
433      &lt;strong&gt;&lt;!--#echo var="REQUEST_URI" --&gt;&lt;/strong&gt;<br />
434      </span>
435    &lt;/blockquote&gt; <br />
436    <br />
437    The request could not be understood by the server due to malformed <br />
438    syntax. The client should not repeat the request without <br />
439    modifications. <br />
440    </span>
441    &lt;/p&gt; <br />
442 <br />
443    &lt;p&gt; <br />
444    <span class="indent">
445    &lt;!--#if expr="$HTTP_REFERER != ''" --&gt; <br />
446     <span class="indent">
447     Please inform the owner of <br />
448     &lt;a href="&lt;!--#echo var="HTTP_REFERER" --&gt;"&gt;the referring page&lt;/a&gt; about <br />
449     the malformed link. <br />
450     </span>
451    <br />
452    &lt;!--#else --&gt; <br />
453     <span class="indent">
454     Please check your request for typing errors and retry. <br />
455     </span>
456    <br />
457    &lt;!--#endif --&gt; <br />
458    </span>
459    &lt;/p&gt; <br />
460 <br />
461 &lt;!--#include virtual="foot" --&gt;
462 </code></p></div>
463
464     <p>Here is the complete <code>head.shtml.en</code> file (the funny
465     line breaks avoid empty lines in the document after SSI
466     processing). Note the configuration section at top. That's
467     where you configure the images and logos as well as the apache
468     documentation directory. Look how this file displays two
469     different logos depending on the content of the virtual host
470     name ($SERVER_NAME), and that an animated apache logo is shown
471     if the browser appears to support it (the latter requires
472     server configuration lines of the form </p>
473
474     <div class="example"><p><code>BrowserMatch "^Mozilla/[2-4]" anigif</code></p></div>
475
476     <p>for browser types which support animated GIFs).</p>
477
478 <div class="example"><p><code>
479 &lt;!--#if expr="$SERVER_NAME = /.*\.mycompany\.com/" --&gt;<br />
480 <span class="indent">
481 &lt;!--#set var="IMG_CorpLogo" value="http://$SERVER_NAME:$SERVER_PORT/errordocs/CorpLogo.gif" --&gt;<br />
482 &lt;!--#set var="ALT_CorpLogo" value="Powered by Linux!" --&gt;<br />
483 </span>
484 <br />
485 &lt;!--#else --&gt; <br />
486 <span class="indent">
487 &lt;!--#set var="IMG_CorpLogo" value="http://$SERVER_NAME:$SERVER_PORT/errordocs/PrivLogo.gif" --&gt; <br />
488 &lt;!--#set var="ALT_CorpLogo" value="Powered by Linux!" --&gt; <br />
489 </span>
490 &lt;!--#endif--&gt; <br />
491 <br />
492 &lt;!--#set var="IMG_BgImage" value="http://$SERVER_NAME:$SERVER_PORT/errordocs/BgImage.gif" --&gt; <br />
493 &lt;!--#set var="DOC_Apache" value="http://$SERVER_NAME:$SERVER_PORT/Apache/" --&gt; <br />
494 <br />
495 &lt;!--#if expr="$anigif" --&gt; <br />
496 <span class="indent">
497 &lt;!--#set var="IMG_Apache" value="http://$SERVER_NAME:$SERVER_PORT/icons/apache_anim.gif" --&gt; <br />
498 </span>
499 &lt;!--#else--&gt;<br />
500 <span class="indent">
501 &lt;!--#set var="IMG_Apache" value="http://$SERVER_NAME:$SERVER_PORT/icons/apache_pb.gif" --&gt;<br />
502 </span>
503 &lt;!--#endif--&gt;<br />
504 <br />
505
506 &lt;!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN"&gt; <br />
507 &lt;html&gt; <br />
508 &lt;head&gt; <br />
509   <span class="indent">
510   &lt;title&gt; <br />
511   [&lt;!--#echo var="REDIRECT_STATUS" --&gt;] &lt;!--#echo var="title" --&gt; <br />
512   &lt;/title&gt; <br />
513   </span>
514 &lt;/head&gt; <br />
515 <br />
516 &lt;body bgcolor="white" background="&lt;!--#echo var="IMG_BgImage" --&gt;"&gt; <br />
517 <span class="indent">
518   &lt;h1 align="center"&gt; <br />
519   [&lt;!--#echo var="REDIRECT_STATUS" --&gt;] 
520   &lt;!--#echo var="title" --&gt; <br />
521   &lt;img src="&lt;!--#echo var="IMG_CorpLogo" --&gt;" <br />
522   &nbsp;&nbsp;alt="&lt;!--#echo var="ALT_CorpLogo" --&gt;" align="right"&gt; <br />
523   &lt;/h1&gt; <br />
524 <br />
525   &lt;hr /&gt;
526   &lt;!-- ======================================================== --&gt; <br />
527   &lt;div&gt;
528 </span>
529 </code></p></div>
530
531     <p>and this is the <code>foot.shtml.en</code> file:</p>
532
533 <div class="example"><p><code>
534 <span class="indent">
535   &lt;/div&gt; <br />
536   &lt;hr /&gt; <br />
537   <br />
538   &lt;div align="right"&gt; <br />
539   <span class="indent">
540   &lt;small&gt;Local Server time:
541   &lt;!--#echo var="DATE_LOCAL" --&gt;&lt;/small&gt; <br />
542   </span>
543   &lt;/div&gt; <br />
544   <br />
545   &lt;div align="center"&gt;<br />
546   <span class="indent">
547     &lt;a href="&lt;!--#echo var="DOC_Apache" --&gt;"&gt; <br />
548     &lt;img src="&lt;!--#echo var="IMG_Apache" --&gt;" border="0" align="bottom" <br />
549     &nbsp;&nbsp;alt="Powered by &lt;!--#echo var="SERVER_SOFTWARE" --&gt;"&gt;&lt;/a&gt; <br />
550   &lt;br /&gt;<br />
551
552   &lt;small&gt;&lt;!--#set var="var" value="Powered by $SERVER_SOFTWARE -- <br />
553   File last modified on $LAST_MODIFIED" --&gt; <br />
554   &lt;!--#echo var="var" --&gt;&lt;/small&gt; <br />
555   </span>
556   &lt;/div&gt; <br />
557   <br />
558   &lt;p&gt;If the indicated error looks like a misconfiguration, please inform <br />
559   &lt;a href="mailto:&lt;!--#echo var="SERVER_ADMIN" --&gt;" <br />
560   subject="Feedback about Error message [&lt;!--#echo var="REDIRECT_STATUS" --&gt;] <br />
561   &lt;!--#echo var="title" --&gt;, req=&lt;!--#echo var="REQUEST_URI" --&gt;"&gt; <br />
562   &lt;!--#echo var="SERVER_NAME" --&gt;'s WebMaster&lt;/a&gt;.<br />
563   &lt;/p&gt;<br />
564   </span>
565 <br />
566 &lt;/body&gt;<br />
567 &lt;/html&gt;
568 </code></p></div>
569
570     <p>If you have tips to contribute, send mail to <a href="mailto:martin@apache.org">martin@apache.org</a></p>
571   </div></div>
572 <div class="bottomlang">
573 <p><span>Available Languages: </span><a href="../en/misc/custom_errordocs.html" title="English">&nbsp;en&nbsp;</a></p>
574 </div><div id="footer">
575 <p class="apache">Copyright 2009 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>
576 <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>
577 </body></html>