SSI and SHTML Learning

Source: Internet
Author: User
Tags echo command netscape web server perl script
What is SHTML?

The html file extension of SSI (Server Side Include). SSI (Server Side Include) is usually called "Server-Side embedding" or "Server-Side inclusion ", is a server-based web page creation technology similar to ASP.

SSI Working principle:

Before sending content to a browser, you can use the server-side include (SSI) command to include text, graphics, or application information to a webpage. For example, you can use SSI to include a time/date stamp, a copyright statement, or a form for the customer to fill in and return. For text or graphics that repeatedly appear in multiple files, using include files is a simple method. You can store the content in an contained file without entering the content into all files. You can use a very simple statement to call the inclusion file, which instructs the Web server to insert content into an appropriate webpage. In addition, when a file is included, all changes to the content can be completed in one place.

Because files containing SSI commands require special processing, the SSI file extension must be assigned to all SSI files. The default extensions are. stm,. shtm, And. shtml.

The Web server processes SSI commands while processing webpages. When the Web server encounters an SSI command, it directly inserts the content containing the file into the HTML webpage. If the "include file" contains the SSI command, insert the file at the same time. In addition to the basic commands used to include files, you can also use the SSI command to insert information about files (such as the file size) or run applications or shell commands.

A common problem with website maintenance is that the website structure is fixed, but a large number of webpages have to be redone to update a little content. SSI provides a simple and effective method to solve this problem. It places the basic structure of a website in several simple HTML files (templates ), in the future, all we need to do is to upload text to the server so that the program can automatically generate webpages according to the template, making it easy to manage large websites.

Therefore, the purpose of pages in SHTML format is similar to that of ASP, but it is faster and more efficient because it is an API. It is faster than ASP and slower than HTML. However, because it can be included on the server, therefore, it is easy to update pages (especially batch update banner and copyright). Imagine that you have an HTML section that involves inserting some special server scripts, such as inserting other HTML sections, you choose ASP to complete this task, but if the task is more heavy, need more time, such as 5 s, this time you do not need ASP and use SHTML, maybe the processing time is only 4S.

What is SSI used?

The reason for this isSSIIs becauseShtml-Server-Parsed HTML. Contains HTML text containing commands on the embedded server. Before being sent to a browser, the server will completely read, analyze, and modify the SHTML document. Shtml is similar to asp. Some ssi commands are used in files named after shtml, just like asp commands. You can write ssi commands in the shtml file, when the client accesses these shtml files, the server will read and interpret these SHTML files and explain the SSI commands contained in The SHTML files, for example: you can use the SSI command in the SHTML file to reference other html files (# include). The files sent by the server to the client are interpreted as SHTML without the SSI command. It implements a function not available in HTML, that is, it can implement a dynamic SHTML. It can be said that it is an evolution of HTML. Like Sina's news system, the news content is fixed, but the advertisements and menus on it are referenced by # include.

At present, it mainly has the following usage:

  1. Display Server Environment Variables <# echo>
  2. Insert text content directly into the document <# include>
  3. Display WEB Document Information <# flastmod # fsize> (such as file creation date/size)
  4. Directly execute various programs on the server <# exec> (for example, CGI or other executable programs)
  5. Set SSI information display format <# config> (for example, file creation date/Size Display Mode)

Advanced SSI <XSSI> allows you to set variables to use the if Condition Statement.


SSI is a set of commands provided for WEB servers. These commands can be directly embedded in the comments of HTML documents. For example:

<! -- # Include file = "info.htm" -->

It is an SSI command, which serves to bring the content of "info.htm" to the front page. When a visitor visits the page, his htmldocument displays the content of info.htm. The usage of other SSI commands is similar to the previous example. It can be seen that SSI only inserts a little code, and the usage is very simple. Of course, if the WEB server does not support SSI, it simply uses it as a comment and directly skips the content. The browser also ignores this information.

How can I configure the SSI function on my WEB server?

On some WEB servers (such as IIS 4.0/SAMBAR 4.2), files containing the # include command must use extensions that have been mapped to the SSI interpreter; otherwise, the Web server will not process the SSI command; by default, the extension. stm ,. shtm and. shtml is mapped to the interpreter (Ssinc. dll ).
Apache depends on your settings. Modify srm. conf as follows:

AddType text/x-server-parsed-html. shtml parses only the file with the .shtml extension SSI command
AddType text/x-server-parsed-html. html parses SSI commands for all HTML documents

The Netscape WEB Server directly uses the Administration Server to enable the SSI function.
Website uses the Mapping label in the Server Admin program. The content type added with the extension is wwwserver/html-ssi.
The Cern server does not support SSI. You can use the SSI fraud method to download a PERL script from the so that your CERN server can use some SSI commands. (Exec commands are not supported .)

SSI command basic format

Program code:

<! -- Command name = "Command Parameters">


<! -- # Include file = "info.htm" -->


  1. <! --> Indicates the annotation in HTML syntax. This information is ignored when the WEB server does not support SSI.
  2. # Include is one of the SSI commands.
  3. File is the include parameter, and info.htm is the parameter value. In this command, specify the document name to be included.


  1. <! -- There is no space between the and #, and only a space exists between the SSI command and the parameter.
  2. The above punctuation = "" cannot be less than one.
  3. The SSI command is case sensitive, so the parameter must be in lower case.
SSI instructions

# Echo demonstration

Purpose: insert environment variables into the page.


<! -- # Echo var = "variable name" -->


<! -- # Echo var = "DOCUMENT_NAME" --> name of this document
<! -- # Echo var = "DATE_LOCAL" --> current time
<! -- # Echo var = "REMOTE_ADDR" --> your IP address

# Include example

Purpose: insert the content of a text file to the document page.


<! -- # Include file = "file name" -->
<! -- # Include virtual = "file name" -->

FileThe file name is a relative path relative to the directory where the document using the # include command is located. The contained file can be in the same level directory or its sub-directory, but not in the upper level directory. For example, the nav_head.htm document under the current directory is file = "nav_head.htm ".
VirtualThe file name is the complete path of the virtual directory on the Web site. For example, if the parameter is relative to the nav_head.htm file in the hoyidirectory under the Server file root directory, it is file = "/hoyi/nav_head.htm"


File specifies the location of the contained file relative to this document
Virtual specifies the location relative to the root directory of the server document


  1. The file name must have an extension.
  2. The contained file can have any file extension. I think it is most convenient to directly use the htm extension. Microsoft recommends using the. inc extension (which depends on your hobby ).


<! -- # Include file = "nav_head.htm" --> Insert the header file to the current page.
<! -- # Include file = "nav_foot.htm" --> Insert the last file to the current page.

# Flastmod and # fsize demonstration


# FlastmodLast file update date
# FsizeFile Length


<! -- # Flastmod file = "file name" -->
<! -- # Fsize file = "file name" -->


File specifies the position of the file to be included in this document, such as info.txt under the current directory.
Virtual specifies the location relative to the root directory of the server document, as shown in/hoyi/info.txt

Note: The file name must have an extension.


<! -- # Flastmod file = "news.htm" --> Insert the latest update date of the news.htm file in the current directory to the current page.
<! -- # Fsize file = "news.htm" --> enter the news.htm file size in the current directory to the current page.

# Exec demonstration

Purpose: insert the output of an external program to the page. The input of a CGI program or a general application can be inserted, depending on whether the parameter is cmd or cgi.


<! -- # Exec cmd = "file name" -->
<! -- # Exec cgi = "file name" -->


CmdRegular applications
CgiCGI script program


<! -- # Exec cmd = "cat/etc/passwd" --> the password file is displayed.
<! -- # Exec cmd = "dir/B" --> the file list in the current directory is displayed.
<! -- # Exec cgi = "/cgi-bin/gb. cgi" --> the CGI program gb. cgi is executed.
<! -- # Exec cgi = "/cgi-bin/access_log.cgi" --> the CGI program access_log.cgi is executed.

Note: As shown in the preceding example, this command is quite convenient, but there are also security problems.

Method prohibited:

  1. Apache: Delete the "Options except des ExecCGI" line of code in access. conf;
  2. To disable the # exec command in IIS, modify the SSIExecDisable metadatabase;

# Config

Purpose: Specify the error message, date, and file size returned to the client browser.


<! -- # Config errmsg = "custom error message" -->
<! -- # Config sizefmt = "display unit" -->
<! -- # Config timefmt = "display format" -->


ErrmsgCustom SSI execution error message, which can be any method you like.
SizefmtFile size display mode. The default format is byte ("bytes"). You can change the format to kilobytes ("abbrev ")
TimefmtTime Display Mode, the most flexible configuration of attributes.

Example: display the size of a non-existing file

<! -- # Config errmsg = "server execution error, please contact the Administrator, thank you! "-->
<! -- # Fsize file = "nonexistent file .htm" -->

Display file size in kilobytes


<! -- # Config sizefmt = "abbrev" -->
<! -- # Fsizefile = "news.htm" -->

Display time in a specific time format

<! -- # Config timefmt = "% Y year/% m month % d day week % W Beijing time % H: % M: % s, % Y years passed % j days today is % U week of % Y years "-->
<! -- # Echo var = "DATE_LOCAL" --> display the day of the week, month, and Time Zone
<! -- # Config timefmt = "today % A, % B, server time zone is % z, yes" -->
<! -- # Echo var = "DATE_LOCAL" -->


XSSI (Extended SSI) is a set of advanced SSI commands built into the mod-include module of Apache 1.2 or later. The available Commands include:

# Printenv
# Set
# If

# Printenv

Purpose: Display All environment variables currently in the WEB server environment.


<! -- # Printenv -->

# Set

Function: assign a value to the variable to be used in the later if statement.


<! -- # Set var = "variable name" value = "variable value" -->


<! -- # Set var = "color" value = "red" -->

# If

Purpose: Create a page that can change the data. The data is displayed according to the requirements calculated when the if statement is used.


<! -- # If expr = "$ variable name = \" variable value A \ "" -->
Display content
<! -- # Elif expr = "$ variable name = \" variable value B \ "" -->
Display content
<! -- # Else -->
Display content
<! -- # Endif "-->


<! -- # If expr = "$ SERVER_NAME = \" \ "-->
Welcome to the substation of easy CGI factory at Yunbo hotline.
<! -- # Elif expr = "$ SERVER_NAME = \" \ "" -->
Welcome to easy CGI factory substation in Sun City /~ Hoyi.
<! -- # Else -->
Welcome to the easy CGI factory!
<! -- # Endif "-->

Note: It is used for the backslash in the preceding command to replace internal quotation marks so that they are not interpreted as an end expression. It cannot be omitted.

1. Config command

The Config command is mainly used to modify the default settings of SSI. Where:

Errmsg: Set the default error message. To return user-defined error messages normally, the Errmsg parameter in the HTML file must be placed before other SSI commands; otherwise, the client can only display default error messages, instead of user-defined information.

<! -- # Config errmsg = "Error! Please email "-->

Timefmt: Defines the format of date and time. The Timefmt parameter must be used before the echo command.

<! -- # Config timefmt = "% A, % B % d, % Y" -->
<! -- # Echo var = "LAST_MODIFIED" -->

The result is as follows:

Wednesday, 10000l 12,200 0

Maybe the user is unfamiliar with % A % B % d in the previous example. Below we will summarize some of the commonly used Date and Time formats in SSI in the form of A table.

Sizefmt: Determines whether the file size is expressed in bytes, kilobytes, or megabytes. In bytes, the parameter value is "bytes". You can use the abbreviations for kilobytes and megabytes. Similarly, the sizefmt parameter must be placed before the fsize command.

<! -- # Config sizefmt = "bytes" -->
<! -- # Fsize file = "index.html" -->

2. Include command

The Include command can insert text or images from other documents into the currently parsed documents, which is the key to the entire SSI. By using the Include command, you only need to change one file to instantly update the entire site!

The Include command has two different parameters:

Virtual: Provides a virtual path to a document on the server.
File: Indicates the relative path to the current directory. "../" cannot be used or an absolute path.

<! -- # Include virtual = "/includes/header.html" -->
<! -- # Include file = "header.html" --> in this case, each directory contains a header.html file.

3. Echo command

The Echo command displays the following environment variables:

DOCUMENT_NAME: Displays the name of the current document.
DOCUMENT_URI: Displays the virtual path of the current document. For example:

<! -- # Echo var = "DOCUMENT_NAME" -->
<! -- # Echo var = "DOCUMENT_URI" -->

With the continuous development of websites, those longer and longer URLs will be a headache. If SSI is used, everything will be solved. Because we can combine the website domain name with the SSI command to display the complete URL, that is:

Http: // YourDomain <! -- # Echo var = "DOCUMENT_URI" -->

QUERY_STRING_UNESCAPED: Displays unescaped query strings sent by the client. All special characters are preceded by the Escape Character "\". For example:

<! -- # Echo var = "QUERY_STRING_UNESCAPED" -->

DATE_LOCAL: Display the date and time when the server sets the time zone. You can combine the timefmt parameter of the config command to customize the output information. For example:

<! -- # Config timefmt = "% A, the % d of % B, in the year % Y" -->
<! -- # Echo var = "DATE_LOCAL" -->

The result is as follows:

Saturday, the 15 of each l, in the year 2000

DATE_GMT: The function is the same as that of DATE_LOCAL, except that the returned date is based on the Greenwich Mean Time. For example:

<! -- # Echo var = "DATE_GMT" -->

LAST_MODIFIED: Displays the Last Update Time of the current document. Similarly, this is a very practical feature of SSI. You only need to add the following simple lines of text to the HTML document to dynamically display the Update Time on the page.

<! -- # Echo var = "LAST_MODIFIED" -->

CGI Environment Variable

In addition to SSI environment variables, the echo command can also display the following CGI Environment variables:

SERVER_SOFTWARE: displays the name and version of the server software. For example:
<! -- # Echo var = "SERVER_SOFTWARE" -->
SERVER_NAME: displays the host name, DNS alias, or IP address of the server. For example:
<! -- # Echo var = "SERVER_NAME" -->
SERVER_PROTOCOL: displays the protocol name and version used by the client request, such as HTTP/1.0. For example:
<! -- # Echo var = "SERVER_PROTOCOL" -->
SERVER_PORT: display the server's response port. For example:
<! -- # Echo var = "SERVER_PORT" -->
REQUEST_METHOD: display the client's document request methods, including GET, HEAD, and POST. For example:
<! -- # Echo var = "REQUEST_METHOD" -->
REMOTE_HOST: the name of the client host that sends the request information.
<! -- # Echo var = "REMOTE_HOST" -->
REMOTE_ADDR: displays the IP address of the client sending the request.
<! -- # Echo var = "REMOTE_ADDR" -->
AUTH_TYPE: shows the authentication method for user identity.
<! -- # Echo var = "AUTH_TYPE" -->
REMOTE_USER: displays the account name used by the user accessing the protected page.
<! -- # Echo var = "REMOTE_USER" -->

4. Fsize: Displays the size of the specified file. You can use the sizefmt parameter of the config command to customize the output format.

<! -- # Fsize file = "index_working.html" -->

5. Flastmod: Display the last modification date of the specified file. You can control the output format with the timefmt parameter of the config command.

<! -- # Config timefmt = "% A, the % d of % B, in the year % Y" -->
<! -- # Flastmod file = "file.html" -->

Here, we can use the flastmod parameter to display the update dates of all links on a page. The method is as follows:

<! -- # Config timefmt = "% B % d, % Y" -->
<A href = "/directory/file.html"> File </A>
<! -- # Flastmod virtual = "/directory/file.html" -->
<A href = "/another_directory/another_file.html"> Another File </A>
<! -- # Flastmod virtual = "/another_directory/another_file.html" -->

The result is as follows:

File Transfer l 19,200 0
Another File January 08,200 0

6. Exec

The Exec command can execute CGI scripts or shell commands. The usage is as follows:

Cmd: Use/bin/sh to execute the specified string. If SSI uses the IncludesNOEXEC option, the command will be blocked.
Cgi: It can be used to execute CGI scripts. For example, in the following example, the counter. pl script under the cgi-bin directory on the server is used to place a counter on each page:

<! -- # Exec cgi = "/cgi-bin/counter. pl" -->

Differences between SHTML and HTML

Let's take a look at the differences between SHTML and HTML. If we use one sentence to explain that SHTML is not HTML but a Server API, shtml is the server's dynamic html.

Both are in hypertext format, but shtml is a file used for SSI technology. That is, the Server Side Include -- SSI Server contains commands. If the Web Server has the SSI function, most (especially Unix-based) WEB servers, such as Netscape Enterprise Server, support SSI commands.

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.