??xml version="1.0" encoding="utf-8" standalone="yes"?>
一、介l:
SSI是Server Side Includes的羃写,是嵌入到HTML面的一l指令的集合。在q回h的页?包含SSI指o)前,服务器会处理q些指oQƈ用处理的l果替换指oQ然 后把面q回。这样就允许在HTML面中添加动态生的内容?br />
SSI是向面中添加小的信息片D늚很好的方法。如果页面的大部分都是生的则需要选择其它的解x案?br />
二、主要用?br />
目前Q主要有以下几种用用途:
1、显C服务器端环境变?lt;#echo>
2、将文本内容直接插入到文档中<#include>
3、显CWEB文相关信息<#flastmod #fsize> (如文件制作日?大小{?
4、直接执行服务器上的各种E序<#exec>(如CGI或其他可执行E序)
5、设|SSI信息昄格式<#config>(如文件制作日?大小昄方式) 高SSI<XSSI>可设|变量用if条g语句?br />
三、设|Tomcat
Tomcat对SSI提供了支持,但在默认的情况下q种支持是关闭的。如果你用Tomcat做ؓHTTP服务器ƈ且需要SSIQ那么需要自己来讄?/p>
四、设|方法如下:
?CATALINA_BASE/server/lib/目录下找到servlets-ssi.renametojar文g
这个文仉命名为servlets-ssi.jar
?CATALINA_BASE/conf/目录下找到web.xml文g
使用SSI Servlet删除在SSI servlet和servlet-mapping周围的注?nbsp;
使用SSI filter删除在SSI filter和filter-mapping周围的注?
五、基本指?br />
1、SSI指o的语法格式如下:
<!--#element [attribute=value] [attribute=value] ... -->
q些指o以HTML注释的Ş式出玎ͼ所以如果你没有正确讄SSIQ浏览器会忽略这些指令。如果你正确讄了SSIQ这些指令会被相应的l果替换?br />
2、config
<!--#config timefmt="%B %Y" -->
config用来指定q回l客L览器的错误信息、日期和文g大小的格式?br />
常用指oQ?br />
<!--#config errmsg="自定义错误信?-->
<!--#config sizefmt="昄单位"-->
<!--#config timefmt="昄格式"-->
参数Q?nbsp;
errmsg 自定义SSI执行错误信息Q可以ؓM你喜Ƣ的方式?nbsp;
sizefmt 文g大小昄方式Q默认ؓ字节方式("bytes")可以改ؓ千字节方?"abbrev")
timefmt 旉昄方式Q最灉|的配|属性?nbsp;
Eg:
<!--#config errmsg="服务器执行错误,误pȝ理员 yiho@126.comQ谢谢!"-->
<!--#fsize file="不存在的文g.htm"-->
以千字节方式昄文g大小
<!--#config sizefmt="abbrev"-->
<!--#fsizefile="news.htm"-->
以特定的旉格式昄旉
<!--#config timefmt="%Yq?%m?d?星期%W 北京旉%H:%M:%sQ?Yq已q去?j?今天?Yq的W?U个星?-->
<!--#echo var="DATE_LOCAL"--> 昄今天是星期几,几月,时区
<!--#config timefmt="今天%A, %B ,服务器时区是 %zQ是"-->
<!--#echo var="DATE_LOCAL"-->
3、echo
echo用来输出变量的倹{?
<!--#echo var="VARIABLE_NAME" -->
<!--#echo var="变量名称"-->
本文档名UͼE序代码:
<!--#echo var="DOCUMENT_NAME"-->
现在旉Q程序代?
<!--#echo var="DATE_LOCAL"-->
你的IP地址是程序代?
<!--#echo var="REMOTE_ADDR"-->
4、exec
<!--#exec cmd="COMMOND" -->
exec用来执行命o?某一外部E序的输出插入到面中。可插入CGIE序或者是常规应用E序的输入,q取决于使用的参数是cmdq是cgi?
<!--#exec cmd="文g名称"-->
<!--#exec cgi="文g名称"-->
<!--#exec cmd="文g名称"-->
<!--#exec cgi="文g名称"-->
参数Q?
cmd 常规应用E序
cgi CGI脚本E序
EgQ?
<!--#exec cmd="cat /etc/passwd"-->会昄密码文g
<!--#exec cmd="dir /b"-->会昄当前目录下文件列?
<!--#exec cgi="/cgi-bin/gb.cgi"-->会执行CGIE序gb.cgi?
<!--#exec cgi="/cgi-bin/access_log.cgi"-->会执行CGIE序access_log.cgi?
注意Q?
从上面的CZ可以看出Q这个指令相当方便,但是也存在安全问题?
止ҎQ?
QApacheQ将access.conf中的"Options Includes ExecCGI"q行代码删除Q?
Q在IIS中,要禁?#exec 命oQ可修改 SSIExecDisable 元数据库Q?
5、flastmod
<!--#flastmod file="FILE_NAME" -->
flastmodq回FILE_NAME所代表的文件的最后修Ҏ间?
Eg:
<!--#flastmod file="news.htm"-->
当前目录下news.htm文g的最q更新日期插插入到当前页?
6、fsize
<!--#fsize file="FILE_NAME" -->
fsizeq回FILE_NAME所代表的文件的大小?
<!--#flastmod file="文g名称"-->
<!--#fsize file="文g名称"-->
参数Q?
file 指定包含文g相对于本文的位|??info.txt 表示当前目录下的的info.txt文
virtual 指定相对于服务器文根目录的位置 ?/hoyi/info.txt 表示
注意Q?
文g名称必须带有扩展名?
Eg:
<!--#fsize file="news.htm"-->
当前目录下news.htm的文件大入到当前页?
7、include
<!--#include file="文g名称"-->
<!--#include virtual="文g名称"-->
include插入FILE_NAME所代表的文件的内容?
file 文g名是一个相对\径,该\径相对于使用 #include 指o的文所在的目录。被包含文g可以在同一U目录或其子目录中,但不能在上一U目录中。如表示当前?nbsp; 录下的的nav_head.htm文Q则为file="nav_head.htm"?
virtual 文g名是 Web 站点上的虚拟目录的完整\径。如表示相对于服务器文档根目录下hoyi目录下的nav_head.htm文gQ则为file="/hoyi/nav_head.htm"
参数Q?
file 指定包含文g相对于本文档的位|?
virtual 指定相对于服务器文档根目录的位置
注意Q?
1、文件名U必d有扩展名?
2、被包含的文件可以具有Q何文件扩展名Q我觉得直接使用htm扩展名最方便
8、printenv
<!--#printenv -->
printenvq回所有定义的变量的列表?
9、set
<!--#set var="VARIABLE_NAME" value="VARIABLE_VALUE" -->
set用来自定义变量。在SSI中有许多标准的变?如DATE_LOCAL)Q其中也包括对于CGIE序有效的环境变量?
10、if elif endif else
if elif endif else用来条g选择?
#if
作用Q?创徏可以改变数据的页面,q些数据Ҏ使用if语句时计的要求予以昄?
语法Q?E序代码:
<!--#if expr="$变量?"变量值A""-->
昄内容
<!--#elif expr="$变量?"变量值B""-->
昄内容
<!--#else-->
昄内容
<!--#endif"-->
Eg:
<!--#if expr="$SERVER_NAME="hoyi.zb169.net""-->
中华E搜网http://www.eshoo.com.cn/
<!--#elif expr="$SERVER_NAME="linux.cqi.com.cn"" -->
中华E搜网http://www.eshoo.com.cn/bbs
<!--#else-->
中华E搜网http://www.eshoo.com.cn/
<!--#endif"-->
注意Q?用于前面指o中的反斜杠,是用来代换内部的引号Q以便它们不会被解释为结束表辑ּ。不可省略?
六、普通用?br />
1、下面是一些比较常规的SSI的用法:
最后修Ҏ?br />
有两U方法:
This file last modified <!--#flastmod file="ssi.shtml" -->
This file last modified <!--#echo var="LAST_MODIFIED" -->
包含一个footer
<!--#include virtual="/footer.html" -->
讄errmsg
<!--#config errmsg="[error message!]" -->
讄sizefmt
<!--#config sizefmt="bytes|abbrev" -->
执行命o
<!--#exec cmd="dir" -->
2、高USSI
XSSIQExtended SSIQ是一l高USSI指oQ内|于Apache 1.2或更高版本的mod-include模块之中?
其中可利用的的指令有Q?
<!--#printenv-->
<!--#printenv-->
<!--#printenv-->
<!--#printenv-->
作用Q?昄当前存在于WEB服务器环境中的所有环境变量?
Q?Q?set
作用Q可l变量赋|以用于后面的if语句?
语法Q程序代?
<!--#set var="变量?value="变量?-->
参数Q无
CZQ?E序代码:
<!--#set var="color"value="U色"-->
SSI允许自定义变量,q些变量可以用来q行比较和条件判断?br />
定义变量
<!--#set var="date" value="${DATE_LOCAL}_${DATE_GMT}" -->
条g表达?br />
<!--#if expr="test_condition" -->
<!--#elif expr="test_condition" -->
<!--#else -->
<!--#endif -->
首先Q你应该认你的两个域名都指向了LIPQ我们拿JZ173.COM和xxsky.com来D个例?br />我们应该首先这两个域名都指向一个IPQ如192.168.4.88
然后:<主题>
我们先来新徏两个文g夹,为方便L认,分别取名jz173.com和xxsky.com,两个文g夹中可以分别攑自的内容
接下来,我们q入IIS讄
我们新徏两个WEB站点Q分别ؓjz173.com和xxsky.comQ名字没什么意思,只是方便辨认?br />首先建立jz173.com站点
注意Q此处ؓ关键处,L头应该输入你q个WEB站点对应的域名,如现在这个站点对应的域名应该是jz173.com
路径为我们刚刚新建的文g夹jz173.com
OK,W一个站点徏立完?br />同样的方法,我们可以建立W二个站点xxsky.com
此处的主机头应该输入xxsky.com
路径为我们刚刚新建的文g夹xxsky.com
IIS讄完成
现在你的Lq定了两个域名?
q说几句:<_֍概括>
1)
在你域名注册商那里修改dns指向
填入你的ip
2)
新建站点的“主机头”指定ؓ你的域名Q再l定C的ipQ,再指定到你的目录
q样可以同一ipQ“绑定”多个域名-Q实现虚拟主?br />
看来再要说几?
提供办法Q?
关于在iis中一个ip建立多个站点的研IӞ
最后一点心得,也是本h研究了很久的问题。由于我的网站徏立在U用的服务器上面Q而且分配l我的ftp的ip地址和这CZ其他用户的一P我就x否可以利用单ip建立多站炏V在参加q次l网实习之前我也注意q网易的免费I间Q分配的ftp地址也是一LQ只不过用户名不同而已。所以在实习中,我尝试这U想法,l果与我设想的一致。下面将Ҏ告诉大家。在iis?每个 web 站点都具有唯一的、由三个部分l成的标识,用来接收和响应请?(1) ip地址(2)端口?3)L头名。我以示例详l讲解:假设我们有三个网站:捷?a)、天天购(b)、天天购blog(c)Q我们先l它们徏立站点目录,然后使用web站点理向导,l这三个|站建立独立的web站点,三者最大的不同是用了不同的主机头?www.a.com.cn
www.b.com.cn
www.c.com.cn
站点主目录指向你ؓ它们讄的目录即可?font color="#dc143c">tcp端口要设|成80。ip地址均指向唯一的一个ip地址。当然访问的时候就输入域名讉K了?/p>