SSI - Server Side Includes

A small tutorial about Server Side Includes commands by me, Martin Stehle. I hope you find it useful. You can send me email to pewtah@snafu.de. For more information about my person visit my homepage (in german!).

SSI-Commands for Apache: config echo exec flastmod fsize if-elif-else-endif include printenv set
You came from: (none)
Your Browser is: Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com)
My Server Software is: Apache/2.4.6 (CentOS) OpenSSL/1.0.2k-fips
Time on my Host is: Friday, 19-Apr-2024 20:06:28 CEST
 
To execute SSI commands, your web server must support SSI and your html-files' extension must be '.shtml' or '.ssi'. The server can also set to parse html-files for SSIs.


Overview


config

errmsg

Command: <!--#echo wrong false words -->
Normal Output:: [an error occured while processing this directive]
 
(Not so nice, eh? So I will set a more natural message as shown in the next line.)
Command: <!--#config errmsg="Unfortunately an error occured. Please inform me via my mail-adress pewtah@snafu.de and I will fix the problem. Thank you in advance." --><!--#echo wrong false words -->
Nice Output:: Unfortunately an error occured. Please inform me via my mail-adress pewtah@snafu.de and I will fix the problem. Thank you in advance.
 

sizefmt

Command: <!--#config sizefmt="bytes" --><!--#fsize file="index.shtml" -->
Output:: 14,749
 
Command: <!--#config sizefmt="abbrev" --><!--#fsize file="index.shtml" -->
Output:: 14K

Commands which can be effected by sizefmt

timefmt

Command: <!--#config timefmt="%d.%m.%Y" --><!--#echo var="DATE_LOCAL" -->
Output:: 19.04.2024
 
Command: <!--#config timefmt="%B" --><!--#echo var="DATE_LOCAL" -->
Output:: April

All Time Formats

Set back Time Format

Command: <!--#config timefmt="%A, %d-%b-%Y %T %Z" --><!--#echo var="DATE_LOCAL" -->
Output:: Friday, 19-Apr-2024 20:06:28 CEST
 

Commands which can be effected by timefmt

Overview

echo

Printing Variables

Command (example): <!--#set var="topic" value="Server Side Includes" --><!--#echo var="topic" -->
Output: Server Side Includes
 
Any Environment Variables which can be found via printenv can be accessed this way. E.g.
Command: <!--#echo var="REMOTE_ADDR" --> (the ip of your host)
Output: 3.144.189.177 (the ip of your host)
 
Overview

exec

With 'exec' you can call CGI-scripts via SSI. E.g. text-only counters, random images or links or text, browser-dependent content etc. It is very powerful by using comparisons. This feature is also a security hole and can be disabled. Sorry, I cannot offer you an example.
 
Overview

fsize

Command: <!--#config sizefmt="bytes" --><!--#fsize file="index.shtml" -->
Output:: 14,749
 
Command: <!--#config sizefmt="abbrev" --><!--#fsize file="index.shtml" -->
Output:: 14K
 
Overview

flastmod

Command: <!--#flastmod file="index.shtml" -->
Output:: Friday, 21-Nov-2014 21:48:40 CET
 
The time format depends on settings via timefmt.
 
Overview

include

Command: <!--#include file="somestuff.shtml" -->
Content of somestuff.shtml:
<b>Hello!</b><br>
You came from <!--#echo var="HTTP_REFERER" --> and the URL of this document is <!--#echo var="SCRIPT_URI" -->.
Output: Hello!
You came from (none) and the URL of this document is http://home.snafu.de/pewtah/ssi/index.shtml.
 
To access a file in another directory, use 'virtual' instead of 'file'. E.g.:
Command: <!--#include virtual="/the/full/path/to/somestuff.shtml" -->
 
Overview

if-elif-else-endif

Command:
<!--#if expr="1 = 2" -->
1 = 2
<!--#elif expr="1 != 2" -->
1 != 2
<!--#else -->
no match
<!--#endif -->
 
Output:
1 != 2

Comparison Operators

e is true if e is true or not an empty string
!e is true if e is false or an empty string
e1 && e2 is true if e1 and e2 are true
e1 || e2 is true if e1 or e2 or both are true
e1 = e2 is true if e1 is equal e2
e1 != e2 is true if e1 not is equal e2
 
Overview

printenv

Command: <pre><!--#printenv --><pre>
Output: not called due to security reasons

Each single variable printed by printenv can be also printed with echo.
 
Overview

set

Command: <!--#set var="topic" value="Server Side Includes" -->
Variable 'topic' was set to 'Server Side Includes' and can be used e.g. for printing or comparisons.
 
Overview
By Martin Stehle © 2024, Berlin Germany
Mail: pewtah@snafu.de