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: Thursday, 21-Nov-2024 12:21:41 CET
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.
- config - set some configuration elements
- echo - print variables on screen
- exec - execute CGI-scripts
- flastmod - print last-modified time of a specific file on screen
- fsize - print size of a specific file on screen
- if-elif-else-endif - control output by comparing variables
- include - build in external files
- printenv - print all environment variables on screen
- set - set variables
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
Command: <!--#config timefmt="%d.%m.%Y" --><!--#echo var="DATE_LOCAL" -->
Output:: 21.11.2024
Command: <!--#config timefmt="%B" --><!--#echo var="DATE_LOCAL" -->
Output:: November
All Time Formats
- timefmt="%a" : Thu
- timefmt="%A" : Thursday
- timefmt="%b" : Nov
- timefmt="%B" : November
- timefmt="%c" : Thu Nov 21 12:21:41 2024
- timefmt="%C" : 20
- timefmt="%d" : 21
- timefmt="%D" : 11/21/24
- timefmt="%e" : 21
- timefmt="%E" : %E
- timefmt="%f" : %f
- timefmt="%F" : 2024-11-21
- timefmt="%g" : 24
- timefmt="%G" : 2024
- timefmt="%h" : Nov
- timefmt="%H" : 12
- timefmt="%i" : %i
- timefmt="%I" : 12
- timefmt="%j" : 326
- timefmt="%J" : %J
- timefmt="%k" : 12
- timefmt="%K" : %K
- timefmt="%l" : 12
- timefmt="%L" : %L
- timefmt="%m" : 11
- timefmt="%M" : 21
- timefmt="%n" :
- timefmt="%N" : %N
- timefmt="%o" : %o
- timefmt="%O" : %O
- timefmt="%p" : PM
- timefmt="%P" : pm
- timefmt="%q" : %q
- timefmt="%Q" : %Q
- timefmt="%r" : 12:21:41 PM
- timefmt="%R" : 12:21
- timefmt="%s" : 1732188101
- timefmt="%S" : 41
- timefmt="%t" :
- timefmt="%T" : 12:21:41
- timefmt="%u" : 4
- timefmt="%U" : 46
- timefmt="%v" : %v
- timefmt="%V" : 47
- timefmt="%w" : 4
- timefmt="%W" : 47
- timefmt="%x" : 11/21/24
- timefmt="%X" : 12:21:41
- timefmt="%y" : 24
- timefmt="%Y" : 2024
- timefmt="%z" : +0100
- timefmt="%Z" : CET
Set back Time Format
Command: <!--#config timefmt="%A, %d-%b-%Y %T %Z" --><!--#echo var="DATE_LOCAL" -->
Output:: Thursday, 21-Nov-2024 12:21:41 CET
Commands which can be effected by timefmt
- flastmod
- echo var="DATE_LOCAL"
- echo var="DATE_GMT"
- echo var="LAST_MODIFIED"
Overview
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: 18.217.161.27 (the ip of your host)
Overview
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
Command: <!--#config sizefmt="bytes" --><!--#fsize file="index.shtml" -->
Output:: 14,749
Command: <!--#config sizefmt="abbrev" --><!--#fsize file="index.shtml" -->
Output:: 14K
Overview
Command: <!--#flastmod file="index.shtml" -->
Output:: Friday, 21-Nov-2014 21:48:40 CET
The time format depends on settings via timefmt.
Overview
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
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
Command: <pre><!--#printenv --><pre>
Output: not called due to security reasons
Each single variable printed by printenv can be also printed with echo.
Overview
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