Are you the harried, overworked web-designer who just learned
the boss wants across the board changes to a thousand page
website? Go ahead, look distressed, ask for a raise and then
make the changes in just a few minutes using Server Side
Includes. (installation required - batteries not included)
Note: Not all of the SSI commands will work on your server. It
depends on what type of server you have and the server
configuration.
What are Server Side Includes and what can I do with them?
Server-side Includes will run on most, but not all servers.
They were first introduced in the NCSA server; Apache has taken
it a step farther with eXtended Server-side Includes.
Unfortunately, they will not run on CERN.
An SSI is a command or directive placed in an HTML file through
the use of a comment line. With a simple
SSI command you can update an entire site design, dynamically add
the current time and date or the date a file was last modified,
execute shell and CGI scripts and more! A definite boon to web
developers who are short on funds and time and over worked with
a gazillion pages to manage.
How to enable
Includes can be "turned on" by editing either the server's configuration
files or adding an .htaccess file to the directory you want to enable
includes in.
Server Configuration
If you have access to your servers configuration files you can
enable SSI with a small edit to the access.conf and srm.conf.
Telnet into your server, navigating to the directory where
your configuration files are located. This may be something
like usr/local/etc/httpd/conf/. Using your favorite
text editor, open srm.conf
and locate the following lines:
# If you want to use server side includes, or CGI outside
# ScriptAliased directories, uncomment the following lines.
#AddType text/x-server-parsed-html .shtml
#AddType application/x-httpd-CGI .CGI
You may or may not have the commented instruction lines,
but what you're looking for are the two lines that start
with AddType. You need to remove the # from
in front of them.
Save your changes and move on to access.conf. You'll need to
locate the section of this file that deals with specifying
which directory should be set as DocumentRoot. You will probably
find something similar to the section below, although it may
have other settings between the <Directory>
and
</Directory>
tags.
# This should be changed to whatever you set DocumentRoot to.
<Directory /usr/local/etc/httpd/htdocs>
# This may also be "None", "All", or any combination of "Indexes",
# "Includes", or "FollowSymLinks"
Options Indexes FollowSymLinks Includes
</Directory>
If you do not wish to allow scripts or shell commands to be
run add IncludesNOEXEC to the options line. This
will allow SSIs but not CGI or shell commands.
Note: In the latest version Apache there is one file that contains all of the config stuff.. the httpd.conf. You can make all of the above edits in this one
file.
.htaccess
If you don't have access to your server config files, all is not
lost. Create a file with your favorite text editor, naming it
.htaccess. (Yes, the (.) is important. It tells your server
that this is a hidden file that can't be seen by the casual
snoop). Add the following three lines to your .htaccess file.
Options Indexes FollowSymLinks Includes
AddType application/x-httpd-CGI .CGI
AddType text/x-server-parsed-html .shtml
.htaccess should be uploaded to the directory you want to
protect. All sub-directories inside that directory will also
be protected. If you wish to exclude CGI or shell commands
on a per directory basis you can add the IncludesNOEXEC
to the options line in the .htaccess file.
Why .shtml? Can't I use .html?
A file that contains includes must be parsed by the server. This
puts an extra load on the server but unless your site receives
[millions] of visitors a day it's unlikely you'll notice a
slow-down in load time. Still, if you're not using includes
to add the headers and footers to your entire site there's
really no need to parse every single page. If your
plan is to just add a few includes to special pages, give them
a file extension of .shtml and the server will parse only those
pages. On the other hand, if you have an existing site of
multiple pages, plan to use includes to add headers and footers
and don't look forward to renaming all of your files to .shtml
you can add the line
AddType text/x-server-parsed-html .html
to your .htaccess file instead. All of your pages will
be parsed, but they'll need to be anyway to grab those headers/footers.