Apache SSI 教程
来源:互联网 发布:mac如何查看java版本 编辑:程序博客网 时间:2024/05/22 03:48
什么是SSI?
SSI是英文Server Side Includes的缩写,翻译成中文就是服务器端包含的意思。从技术角度上说,SSI就是在HTML文件中,可以通过注释行调用的命令或指针。SSI具有 强大的功能,只要使用一条简单的SSI命令就可以实现整个网站的内容更新,时间和日期的动态显示,以及执行shell和CGI脚本程序等复杂的功能。
如何使你的Apache服务器支持SSI?
Apache默认是不支持SSI的,需要我们更改httpd.conf来进行配置。我这里以windows平台的Apache 2.0.x为例,打开conf目录下的httpd.conf文件,搜索“AddType text/html .shtml”,搜索结果:
# AddType text/html .shtml
# AddOutputFilter INCLUDES .shtml
把这两行前面的#去掉。
然后搜索“Options Indexes FollowSymLinks”
在搜索到的那一行后面添加“ Includes”
即将该行改变为 Options Indexes FollowSymLinks Includes 本文来自无涯教程网:http://www.wuyapc.com
保存httpd.conf,重起apache即可。
到此我们就完成了对Apache SSI的设置。
Apache SSI 教程
版本 1.1
本文参照的系统环境:
l Windows XP SP2
l Apache HTTP Server v2.0.55 (Win32)
什么是 SSI?
SSI(Server Side Includes),是嵌套在 HTML 网页中的指示语句,由后台服务器进行代码的解释计算。使用 SSI 可以动态的创建一部分网页内容而不需要编写复杂的 JSP/ASP/PHP 等程序。SSI 是如此的小巧以至于不应算作一门语言,因为他远没有JSP/ASP/PHP 等程序那么复杂,只有一些极其有限的语法规则。但就算是只有这有限的一点语法规则,只要开动起你创新的思维,仍然可以“小才大用”,为你带来效率的提高、体力的节省和脑力的放松 J
很多 HTTP Server 程序都支持 SSI,可能语法稍有不同,比如: IIS/Novell HTTP Server 等等,大同小异,本文要说明的是 Apache 2.0 的 SSI。闲话少说,我想告诉大家的是,这是一篇实践经验总结性的文章,后文中的示例解决方案都是来自实际的网站应用中。其中的一些想法和概念会给你带来提示性的参考或者直接拿为所用。
下图展示了 SSI 被服务器解释,生成最终的纯 HTML 网页后,再发送给访问者浏览的过程:
图 1
系统环境安装
这不是一篇教你如何配置 Apache 的文章,但为了在你在本地系统环境测试的方便,还是简单的说明一下。
首先可以到 http://www.apache.org/ 网站去下载一份最新的 Apache 安装文件,安装之后是否要做其他设置请自行参考相关资料,这里只说明如何开启 SSI 支持的步骤。
我在本地创建了一个 bnn 的文件夹,设成虚拟目录,然后就可以通过浏览器访问:http://localhost/bnn/
打开 Apache 的配置文件,例如:C:/Program Files/Apache Group/Apache2/conf/httpd.conf
然后加入类似下面的这段代码(主要是中间的三行):黑体字部分是文件夹路径。
<Directory "D:/Works/Jan-Boy/bnn">
AddType text/html .ssi
Options Includes
AddOutputFilterByType INCLUDES;DEFLATE text/html
</Directory>
<!--#e cho var="DATE_LOCAL" -->
保存关闭,然后打开浏览器测试:http://localhost/bnn/
如果正确的显示出类似“Wednesday, 01-Mar-2006 02:03:06 China Standard Time”这样的文字就表示 SSI 开启成功!
“呼~~”深呼一口气,搞掂,收工!
开始 SSI
参考资源
在正式开始之前,先介绍两个官方参考文档:
Apache Tutorial: Introduction to Server Side Includes
http://httpd.apache.org/docs/2.0/howto/ssi.html
Apache Module mod_include
http://httpd.apache.org/docs/2.0/mod/mod_include.html
这些文档在 Apache 的安装文件夹中可以找到,然后通过 HTTP 进行访问,并提供多国语言版本,不过没有中文(已经习惯了,谁让CN常常是被忽视的小弱国呢~,不过似乎网上流传了英雄好汉们翻译过的部分内容)。在官方网站上可以找到最新版的文档(包括更新测试版的文档):http://httpd.apache.org/docs-project/
SSI 语法
SSI 指令的语法格式:
<!--#element attribute=value attribute=value ... -->
举几个实际例子:
http://<!--#e cho var=”SERVER_NAME” var=”DOCUMENT_URI” -->
<!--#i nclude virtual=”ssi/footer.ssi” -->
<!--#set var=”Protocol” value=”http” -->
参见语法格式图示:
图 2
注意:
1. 在结尾符号“-->”的前面需要有一个空格,是不能丢掉的,曾经在一个复杂的页面中遇到一个问题是因为没有加上那个空格引起的,因为很多时候容易忽略到这个小问题,而往往最难纠错的就是这些小问题引起。
2. SSI 不区分大小写,包括元素名称、变量名称,大写和小写都是允许的。
书写格式的约定(推荐格式,并非强制):
l 元素和属性使用小写字母;
l 环境变量都使用大写字母;
l 合理的缩进,在使用 if 语句嵌套的时候推荐使用 1 tab(占 4 space) 缩进,以变更清晰的显示层次关系。
SSI 使用
对于 SSI 具体的使用是否有些不清楚呢?下面列出一份完整的示例代码:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Learning Apache SSI</title>
<link href="/blog/includes/style.css" rel="stylesheet" type="text/css" />
</head>
<body>
<!--#i nclude virtual="/bnn/ssi/header.ssi"-->
<div id="Main">
<div id="LeftNav">Left Navigation</div>
<div id="RightNav">Right Navigation</div>
<div id="Content">
<p>This is "<a href="http://<!--#e cho var='SERVER_NAME' -->">Learning Apache SSI</a>" testing page!</p>
<p>Hello SSI</p>
<p>Today is: <!--#e cho var="DATE_LOCAL" --></p>
</div>
</div>
<!--#i nclude virtual="ssi/footer.ssi"-->
</body>
</html>
说明:
1. SSI 可以插入在网页的任意地方;
2. 属性值要合理使用双引号和单引号,例如“<!--#e cho var='SERVER_NAME' -->”这个位置,大多数情况下, SERVER_NAME 使用双引号不会出现问题,但在一些复杂的网页里面仍然会造成歧义,Apache 无法识别正确的引号配对匹配。
变量和数据类型
SSI 中的变量分为自定义变量和环境变量。
自定义变量使用 set 命令来创建:
<!--#set var=”Protocol” value=”http” -->
说明:var 属性值就是变量名称;value 的属性值就是变量值。上面的语句表示,创建了一个 “Protocol”的变量,变量所代表的值是 “http”。
环境变量是系统已经存在的一些默认的变量和变量值,可以直接使用。例如:
<!--#e cho var=”DATE_LOCAL” -->
说明: DATE_LOCAL 就是一个环境变量,用来显示当前本地时间。类似的环境变量还有很多,比如常用HTTP_HOST、SERVER_NAME、DOCUMENT_URI、DOCUMENT_NAME 等等。
想知道到底有多少个可以用的环境变量么?很简单的方法:
<!--#printenv -->
说明:printenv 命令就是这个作用,将所有的环境变量和变量当前值列表出来。我们把上面的一行代码放入到任意一个页面中,然后通过浏览器访问这个页面:
图 3
看到的很乱页面,查看源代码吧:
哦,原来是一个纯文本格式的,每行第一个等号前面的是环境变量名称,后面就是他所代表的字符串值。
HTTP_ACCEPT=*/*
HTTP_ACCEPT_LANGUAGE=en-us,zh-cn;q=0.5
HTTP_USER_AGENT=Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; .NET CLR 1.1.4322)
HTTP_HOST=localhost
HTTP_CONNECTION=Keep-Alive
HTTP_COOKIE=dbx-postmeta=grabit=2+,5+,6-,1-,4-,3-,0-&advancedstuff=0-,1-,2-
PATH=C:/Program Files/ThinkPad/Utilities;C:/WINDOWS/system32;C:/WINDOWS;C:/WINDOWS/System32/Wbem;C:/Program Files/IBM/Infoprint Select;C:/Program Files/ATI Technologies/ATI Control Panel;C:/Program Files/QuickTime/QTSystem/;C:/Program Files/ThinkPad/ConnectUtilities
SystemRoot=C:/WINDOWS
COMSPEC=C:/WINDOWS/system32/cmd.exe
PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH
WINDIR=C:/WINDOWS
SERVER_SIGNATURE=<address>Apache/2.0.55 (Win32) PHP/5.1.1 Server at
SERVER_SOFTWARE=Apache/2.0.55 (Win32) PHP/5.1.1
SERVER_NAME=localhost
SERVER_ADDR=127.0.0.1
SERVER_PORT=80
REMOTE_ADDR=127.0.0.1
DOCUMENT_ROOT=D:/Works/Jan-Boy
SERVER_ADMIN=admin@boynannan.com
SCRIPT_FILENAME=D:/Works/Jan-Boy/bnn/printenv.html
REMOTE_PORT=2529
GATEWAY_INTERFACE=CGI/1.1
SERVER_PROTOCOL=HTTP/1.0
REQUEST_METHOD=GET
QUERY_STRING=
REQUEST_URI=/bnn/printenv.html
SCRIPT_NAME=/bnn/printenv.html
DATE_LOCAL=Thursday, 02-Mar-2006 11:15:45
DATE_GMT=Thursday, 02-Mar-2006 03:15:45 GMT
LAST_MODIFIED=Wednesday, 01-Mar-2006 10:02:13
DOCUMENT_URI=/bnn/printenv.html
USER_NAME=<unknown>
DOCUMENT_NAME=printenv.html
<!--#set var=”MyFirstVar” value=”120” -->
<!--#set var=”MySecondVar” value=”20” -->
- Apache SSI 教程
- apache支持ssi
- apache ssi配置
- Apache中配置ssi
- Apache--SSI 服务器端包含
- Apache SSI 使用
- apache SSI使用
- 配置apache支持SSI
- 为Apache配置SSI
- SSI-SHTML教程
- apache执行SSI 程序shtml
- Apache支持SSI的配置
- apache服务器ssi支持配置
- apache配置ssi支持shtml
- Apache的服务端包含--SSI
- apache下ssi的支持
- 设置APACHE 支持SSI (ORACLE PORTAL +APACHE )
- Apache指南:服务器端包含入门(SSI)
- HttpWebRequest编程相关问题(2)
- 国内电话号码的正则表达式
- JAVA笔记 关于IP的小程序
- 定下了AD分压键盘方案
- 一个有用函数的用法-decode
- Apache SSI 教程
- 我一直很自卑的
- 一个全文检索的简单需求,想用lucene,大家看看,提提思路
- JSP自定义标签简介
- 编写JAVA前所要的环境变量设置
- 中国职员的九种劣根性(摘抄,感觉写得挺现实的)
- C++类静态数据成员与类静态成员函数
- Eclipse常用快捷键总结
- Velocity用户手册---中文版