热门标签 | HotTags
当前位置:  开发笔记 > 前端 > 正文

HTML静态页面引入公共html文件(ssi服务器端指令详解)

今天为大家介绍一种在HTML静态文件中引用其它HTML静态文件的方法SSI的详细使用方法与指令介绍

你是否曾经或正在为如何能够在最短的时间内完成对一个包含上千个页面的网站的修改而苦恼?

那么可以看一下本文的介绍,或许能够对你有所帮助。 

什么是SSI? 

SSI是英文Server Side Includes的缩写,翻译成中文就是服务器端包含的意思。从技术角度上说,SSI就是HTML文件中,可以通过注释行调用的命令或指针。

SSI 具有强大的功能,只要使用一条简单的SSI 命令就可以实现整个网站的内容更新,动态显示时间和日期,以及执行shell和CGI脚本程序等复杂的功能。SSI 可以称得上是那些资金短缺、时间紧张、工作量大的网站开发人员的最佳帮手。

SSI最初在NCSA服务器平台上推出,在Apache服务器中得到扩展和加强,目前已经可以在几乎所有的服务器上运行。本文将主要结合Apache服务器介绍SSI的使用方法。 

如何启动SSI? 

在Apache服务器下,可以通过直接编辑服务器配置文件或者在需要使用SSI的目录中创建.htaccess文件启动SSI。具体来说,过程如下: 

1.服务器配置文件 

如果用户具有对服务器配置文件的访问权限,可以通过编辑文件access.conf和srm.conf启动SSI。 
首先使用Telnet远程登录服务器,找到配置文件的存放目录。

一般来说,Apache服务器的配置文件都被保存在“/usr/local/etc/httpd/conf”目录下。

使用任何一种文字编辑器打开文件srm.conf,找到以下几行: 

# 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 

用户的配置文件中可能没有上述的注释指令行,但是只要找到以AddType开头的两行并且去掉每一行最前面的“#”符号即可。 
保存所做的修改,然后再打开文件access.conf。用户需要在文件中找到设置DocumentRoot(根文件)的部分。一般来说该段文本如下,但是不排除标签之间还包含其它设置内容。 

# This should be changed to whatever you set DocumentRoot to. 
 
# This may also be "None", "All", or any combination of "Indexes", 
# "Includes", or "FollowSymLinks" 
Options Indexes FollowSymLinks Includes 
 

如果用户不希望执行脚本或shell命令,可以在options选项行中加入关键字IncludesNOEXEC,这样可以允许SSI,但是不能执行CGI或脚本命令。

(注:最新版本的Apache服务器只有一个配置文件httpd.conf,以上所提到的内容都已经被包含在该文件中) 

2.创建文件.htaccess 

如果用户不能直接访问服务器配置文件,可以使用文件编辑器创建一个名为.htaccess的文件。注意,文件名前一定要有符号“.”,这样服务器才能知道该文件是隐藏文件,从而提高文件的安全性,避免错误操作。在.htaccess文件中需要加入以下三行文字: 

Options Indexes FollowSymLinks Includes 
AddType application/x-httpd-CGI .CGI 
AddType text/x-server-parsed-html .shtml 

完成之后可以把.htaccess文件上传到服务端的相应目录,该文件对所有子目录有效。如果用户希望在目录级上禁止CGI或shell命令,可以在.htaccess文件中的Options选项行加入关键字IncludesNOEXEC。 

3.使用.shtml还是.html? 

任何包含SSI的文件在下传到客户端之前,都必须经过服务器的解析过程。

虽然从某种程度上这样会增加服务器的负载,但是除非用户的网站每天有几百万的访问用户,某则服务器的性能不会有明显的下降。

不过,如果不是需要在每个页面都使用SSI的话,确实没有必要让服务器解析每一个页面。如果用户只希望在几个特殊页面中使用SSI,可以将文件的后缀名改为.shtml,这样服务器就可以只解析包含SSI的.shtml文件。

另一方面,如果有多个页面使用了SSI,但是用户不希望使用.shtml的后缀名时,可以在.htaccess文件中使用以下命令行: 
AddType text/x-server-parsed-html .html 

SSI语法 

SSI在使用时遵循以下格式: 

 

其中,directive是向服务器发送的指令名称,parameter是指令的操作对象,而value则是用户希望得到的指令处理结果。  
所有的SSI命令都是以“”。 

SSI命令包含六大类指令以及各自的参数,具体如下: 

directives parameters 
Config errmsg, timefmt, sizefmt 
include virtual, file 
echo var 
fsize file 
flastmod file 
exec cmd, cgi 

下面我们将逐一进行介绍。 

1.Config命令 

Config命令主要用于修改SSI的默认设置。其中: 

Errmsg:设置默认错误信息。为了能够正常的返回用户设定的错误信息,在HTML文件中Errmsg参数必须被放置在其它SSI命令的前面,否则客户端只能显示默认的错误信息,而不是由用户设定的自定义信息. 

 

Timefmt:定义日期和时间的使用格式。Timefmt参数必须在echo命令之前使用。 

 

 

显示结果为: 

Wednesday, April 12, 2000 

也许用户对上例中所使用的%A %B %d感到很陌生,下面我们就以表格的形式总结一下SSI中较为常用的一些日期和时间格式。 
格式 说明 实例 

%% %  
%a 一周七天的缩写形式 Thu  
%A 一周七天 Thursday  
%b 月的缩写形式 Apr  
%B 月 April  
%d 一个月内的第几天 13  
%D mm/dd/yy日期格式 04/13/00  
%H 小时(24小时制,从00到23) 01  
%I 小时(12小时制,从00到11) 01  
%j 一年内的第几天,从01到365 104  
%m 一年内的第几个月,从01到12 04  
%M 一小时内的第几分钟,从00到59 10  
%p AM或PM AM  
%r 12小时制的当地时间,格式为 01:10:18 AM  
%I:%M:%S AM | PM  
%S 一分钟内的第几秒,从00到59 18  
%T 24小时制的%H:%M:%S时间格式 01:10:18  
%U 一年内的第几个星期,从00到 15   52,以星期天作为每个星期的第一天 
%w 一星期内的第一天,从0到6 4  
%W 一年内的第几个星期,从00 15   到53,以星期一作为每个星期的第一天  
%y 年的缩写形式,从00到99 00  
%Y 用四位数字表示一年 2000  
%Z 时区名称 MDT 

Sizefmt:决定文件大小是以字节、千字节还是兆字节为单位表示。如果以字节为单位,参数值为“bytes”;对于千字节和兆字节可以使用缩写形式。同样,sizefmt参数必须放在fsize命令的前面才能使用. 

 
  

2.Include命令 

Include命令可以把其它文档中的文字或图片插入到当前被解析的文档中,是整个SSI的关键所在。通过Include命令只需要改动一个文件就可以瞬间更新整个站点! 

Include命令具有两个不同的参数,如果使用错误的参数更新站点的话,不仅达不到初衷,反而会得到一大堆的错误信息。 

Virtual:给出到服务器端某个文档的虚拟路径。例如: 

 

File:给出到当前目录的相对路径,其中不能使用"../",也不能使用绝对路径。例如:

这就要求每一个目录中都包含一个header.html文件。

为了更加合理的组织站点的内容,用户可以在根目录下创建includes子目录来存放所有的包含文件。Virtual参数可以通知服务器所要包含的是一个虚拟文件,即文件和当前被解析的文档不是位于同一个目录,而是存放在其它目录中。

服务器会根据该参数的值找到根目录下的includes子目录。使用这种方法,用户可以把所有HTML文档包含的文件放在一个目录中,而根据相互之间的关系把不同的页面保存在不同的目录或子目录中。

无论服务器解析哪一个文档都可以找到所包含的文件,不会产生任何错误。 
不过这里有一个小问题需要解决。一般我们都会在页面中加入一些TITLE和META标签,如果我们规定所有的页面都调用相同的页眉文件的话,就显得很不灵活。

用户碰到这样的问题时,可以使用两个包含文件,一个设置TITLE标签前的内容,另一个设置META标签后的部分,而在两个包含文件之间则可以添加任何定制内容。例如: 

 
 
 
 
 
 

这里放置页面内容 

 

从上我们可以看出通过在页面中包含页眉和页脚可以大大减少站点更新的工作量。但是如果我们希望动态显示一些内容,例如页面的最后更新时间等该怎么办呢?没问题,我们可以把包含文件使用.html后缀保存,这样就可以在包含文件中调用其它的包含文件。

File:给出到当前目录的相对路径,其中不能使用“../”,也不能使用绝对路径。例如: 

 

这就要求每一个目录中都包含一个header.html文件。当然,采用这样的方法并不比更新每一个页面简单多少,但是如果用户只更新一、两个文件的话还是很方便的。例如,如果我们不希望让一个对HTML不熟悉的人直接改动网站中的新闻页面的话,可以只让他更新一个单独的文本文件,然后再把该文件包含到HMTL文档中,这样即不会破坏原页面,同时又更新了内容,两全其美 

3.Echo: 

Echo命令可以显示以下各环境变量: 

DOCUMENT_NAME:显示当前文档的名称。 

 

显示结果为: 

index.html 

DOCUMENT_URI:显示当前文档的虚拟路径。例如: 

 

显示结果为: 
/YourDirectory/YourFilename.html 

随着网站的不断发展,那些越来越长的URL地址肯定会让人头疼。如果使用SSI,一切就会迎刃而解。因为我们可以把网站的域名和SSI命令结合在一起显示完整的URL,即:

http://YourDomain 

QUERY_STRING_UNESCAPED:显示未经转义处理的由客户端发送的查询字串,其中所有的特殊字符前面都有转义符“\”。例如: 

 

DATE_LOCAL:显示服务器设定时区的日期和时间。用户可以结合config命令的timefmt参数,定制输出信息。例如: 

  
 

显示结果为: 

Saturday, the 15 of April, in the year 2000 

DATE_GMT:功能与DATE_LOCAL一样,只不过返回的是以格林尼治标准时间为基准的日期。例如: 

 

LAST_MODIFIED:显示当前文档的最后更新时间。同样,这是SSI中非常实用的一个功能,只要在HTML文档中加入以下这行简单的文字,就可以在页面上动态的显示更新时间。 

 

CGI环境变量 

除了SSI环境变量之外,echo命令还可以显示以下CGI环境变量: 
SERVER_SOFTWARE:显示服务器软件的名称和版本。例如: 
 
SERVER_NAME: 显示服务器的主机名称,DNS别名或IP地址。例如: 
 
SERVER_PROTOCOL:显示客户端请求所使用的协议名称和版本,如HTTP/1.0。例如: 
 
SERVER_PORT:显示服务器的响应端口。例如: 
 
REQUEST_METHOD:显示客户端的文档请求方法,包括GET, HEAD, 和POST。例如: 
 
REMOTE_HOST:显示发出请求信息的客户端主机名称。 
 
REMOTE_ADDR:显示发出请求信息的客户端IP地址。 
 
AUTH_TYPE:显示用户身份的验证方法。 
 
REMOTE_USER:显示访问受保护页面的用户所使用的帐号名称。 
 

4.Fsize:

显示指定文件的大小,可以结合config命令的sizefmt参数定制输出格式。

 

5.Flastmod:

显示指定文件的最后修改日期,可以结合config 命令的timefmt参数控制输出格式。 

  
 

这里,我们可以利用flastmod参数显示出一个页面上所有链接页面的更新日期。方法如下: 

显示结果为: 

File April 19, 2000  
Another File January 08, 2000 

也许有的读者会认为两个链接就这么复杂,一点也不方便。其实,如果页面上有20个或者更多的链接,而且每个链接都定期更新的话,就可以看出使用flastmod显示修改日期的作用。 

6.Exec 

Exec命令可以执行CGI脚本或者shell命令。使用方法如下: 

Cmd:使用/bin/sh执行指定的字串。如果SSI使用了IncludesNOEXEC选项,则该命令将被屏蔽。 

Cgi:可以用来执行CGI脚本。例如,下面这个例子中使用服务端cgi-bin目录下的counter.pl脚本程序在每个页面放置一个计数器: 
 


推荐阅读
  • CentOS 7部署KVM虚拟化环境之一架构介绍
    本文介绍了CentOS 7部署KVM虚拟化环境的架构,详细解释了虚拟化技术的概念和原理,包括全虚拟化和半虚拟化。同时介绍了虚拟机的概念和虚拟化软件的作用。 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • PDF内容编辑的两种小方法,你知道怎么操作吗?
    本文介绍了两种PDF内容编辑的方法:迅捷PDF编辑器和Adobe Acrobat DC。使用迅捷PDF编辑器,用户可以通过选择需要更改的文字内容并设置字体形式、大小和颜色来编辑PDF文件。而使用Adobe Acrobat DC,则可以通过在软件中点击编辑来编辑PDF文件。PDF文件的编辑可以帮助办公人员进行文件内容的修改和定制。 ... [详细]
  • 一句话解决高并发的核心原则
    本文介绍了解决高并发的核心原则,即将用户访问请求尽量往前推,避免访问CDN、静态服务器、动态服务器、数据库和存储,从而实现高性能、高并发、高可扩展的网站架构。同时提到了Google的成功案例,以及适用于千万级别PV站和亿级PV网站的架构层次。 ... [详细]
  • 如何实现织梦DedeCms全站伪静态
    本文介绍了如何通过修改织梦DedeCms源代码来实现全站伪静态,以提高管理和SEO效果。全站伪静态可以避免重复URL的问题,同时通过使用mod_rewrite伪静态模块和.htaccess正则表达式,可以更好地适应搜索引擎的需求。文章还提到了一些相关的技术和工具,如Ubuntu、qt编程、tomcat端口、爬虫、php request根目录等。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 本文讨论了Alink回归预测的不完善问题,指出目前主要针对Python做案例,对其他语言支持不足。同时介绍了pom.xml文件的基本结构和使用方法,以及Maven的相关知识。最后,对Alink回归预测的未来发展提出了期待。 ... [详细]
  • 禁止程序接收鼠标事件的工具_VNC Viewer for Mac(远程桌面工具)免费版
    VNCViewerforMac是一款运行在Mac平台上的远程桌面工具,vncviewermac版可以帮助您使用Mac的键盘和鼠标来控制远程计算机,操作简 ... [详细]
  • 本文介绍了通过ABAP开发往外网发邮件的需求,并提供了配置和代码整理的资料。其中包括了配置SAP邮件服务器的步骤和ABAP写发送邮件代码的过程。通过RZ10配置参数和icm/server_port_1的设定,可以实现向Sap User和外部邮件发送邮件的功能。希望对需要的开发人员有帮助。摘要长度:184字。 ... [详细]
  • 如何提高PHP编程技能及推荐高级教程
    本文介绍了如何提高PHP编程技能的方法,推荐了一些高级教程。学习任何一种编程语言都需要长期的坚持和不懈的努力,本文提醒读者要有足够的耐心和时间投入。通过实践操作学习,可以更好地理解和掌握PHP语言的特异性,特别是单引号和双引号的用法。同时,本文也指出了只走马观花看整体而不深入学习的学习方式无法真正掌握这门语言,建议读者要从整体来考虑局部,培养大局观。最后,本文提醒读者完成一个像模像样的网站需要付出更多的努力和实践。 ... [详细]
  • 本文介绍了一个免费的asp.net控件,该控件具备数据显示、录入、更新、删除等功能。它比datagrid更易用、更实用,同时具备多种功能,例如属性设置、数据排序、字段类型格式化显示、密码字段支持、图像字段上传和生成缩略图等。此外,它还提供了数据验证、日期选择器、数字选择器等功能,以及防止注入攻击、非本页提交和自动分页技术等安全性和性能优化功能。最后,该控件还支持字段值合计和数据导出功能。总之,该控件功能强大且免费,适用于asp.net开发。 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • 本文介绍了Linux系统中正则表达式的基础知识,包括正则表达式的简介、字符分类、普通字符和元字符的区别,以及在学习过程中需要注意的事项。同时提醒读者要注意正则表达式与通配符的区别,并给出了使用正则表达式时的一些建议。本文适合初学者了解Linux系统中的正则表达式,并提供了学习的参考资料。 ... [详细]
  • 如何实现JDK版本的切换功能,解决开发环境冲突问题
    本文介绍了在开发过程中遇到JDK版本冲突的情况,以及如何通过修改环境变量实现JDK版本的切换功能,解决开发环境冲突的问题。通过合理的切换环境,可以更好地进行项目开发。同时,提醒读者注意不仅限于1.7和1.8版本的转换,还要适应不同项目和个人开发习惯的需求。 ... [详细]
  • 如何更改电脑系统的自动校时服务器地址?
    本文介绍了如何通过注册表编辑器更改电脑系统的自动校时服务器地址。通过修改注册表中的数值数据或新建字符串数值的方式,可以将默认的时钟同步服务器地址更改为自己所需要的域名或IP地址。详细步骤包括双击时间区域,点击internet时间,勾选自动校正域名设置定时等操作。 ... [详细]
author-avatar
我叫yyson_836
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有