存档

文章标签 ‘apache’

使用JS实现client side include

2011年8月26日 没有评论

上一篇日志从网上转载了一个开启SSI的日志,开启了SSI以后,可以让许多页面包含共有的header以及footer,这样在做修改的时候只需要修改一个地方就可以了,十分方便。但是在实际使用中,有可能会出现无法开启SSI的情况。

比如,你向别人租用了一台虚拟主机,而该虚拟主机的管理员在httpd.conf中并没有设置Includes Option,同时很悲剧的他又设置了AllowOverrides为None,这样即使你使用.htacesss也就没有办法开启SSI了,so,这个时候该肿么办,笔者之前的做法是在一台测试服务器上开启SSI,并书写包含有SSI指令的web页面,当在向生产服务器部署的时候则写了一个python脚本将SSI指令替换生成静态html。但是这样子做的一个缺点在于,测试服务器与生产服务器之间的数据就无法进行同步,每次需要大规模修改页面外观的时候,必须对测试服务器上的SSI页面进行处理以后才可以部署到生产服务器上,十分繁琐。

于是,这篇日志的主角登场了~使用Javascript实现client side include,原理很简单,就是将header和footer的内容用document.write输出,然后在每个页面中包含相应的js文件即可。

让htm支持SSI

2011年8月26日 没有评论

iis中:
  也就是需要两步,
  1.在虚拟主机块中加入,或者全局加
  AddOutputFilter INCLUDES .htm
  AddHandler server-parsed .htm
  2.在Directory中的Options加入Includes参数,我觉得使用IncludesNOEXEC可能会更好。

<Directory "F:/hx/">
    Options Indexes FollowSymLinks IncludesNOEXEC
</Directory>

  一些错误的解决:
  包含的文件出现如下提示:[an error occurred while processing this directive]
  原因之一:先检查一下包含的文件路径对不对,文件是否存在。
  如果正确,则问题出在包含的语句上。

<!--#include file="文件名称"-->
<!--#include virtual="文件名称"-->

  file 文件名是一个相对路径,该路径相对于使用 #include 指令的文档所在的目录。被包含文件可以在同一级目录或其子目录中,但不能在上一级目录中。如表示当前目录下的的top.htm文档,则为file=”top.htm”。
  virtual 文件名是 Web 站点上的虚拟目录的完整路径。如表示相对于服务器文档根目录下hx目录下的top.htm文件;则为virtual=”/hx/top.htm”
  如果是上一级目录的子目录,就是使用路径../hx/top.htm时,需要使用Virtual,如果使用file,则会产生上面的提示。但在IIS下这样好像不会产生错误。
  Apache中:
  要使服务器允许SSI ,必须在httpd.conf或.htaccess文件中有如下配置:
  Options +Includes
  这样就告诉服务器允许解析文件中的SSI指令。注意,在多数配置中,多个Options指令会互相覆盖,所以可能需要对使用SSI的目录专门使用一个Options指令,以确保其有效。
  并非所有文件中的SSI指令都会被解析,必须告诉Apache应该解析哪些文件。有两种方法使Apache解析带有特定后缀名的文件,比如:.shtml ,配置如下:

  AddType text/html .shtml
  AddOutputFilter INCLUDES .shtml

  该方法的缺点之一是,为了使文件具有.shtml后缀从而执行其中的指令,需要加入SSI指令的现有文件的名字,以及所有指向此页面的连接。
  另一种方法是,使用XBitHack指令:
  XBitHack on
  XBitHack告诉Apache解析所有设置了执行位的文件中的SSI指令。这样,无需修改文件名,只要用chmod使文件变成可执行的,就可以对现有页面增加SSI指令。
  chmod +x pagename.html
  这里简要说明一点:偶然会有人向你推荐,无须用带.shtml的文件名,只要使Apache解析所有.html文件的SSI就可以了。那些人可能没听说过XBitHack 。要知道,这样做会使Apache在发送文件到客户端之前通读此文件,即使其中并没有任何SSI指令,从而对速度有很不利的影响,所以这并不是好办法。
  当然,在Windows上,没有对应的执行位可以设置,所以对你的配置方法就有一些限制。
  在默认配置的情况下,Apache不会为SSI页面发送最后修改日期或者内容长度的HTTP头,因为这些值对动态页面来说难以确定。这样会阻止页面被缓冲,导致客户端性能有明显的下降。有两种解决方法:
  设置 XBitHack Full ,告诉Apache在判断最后修改日期时,只查看被请求文件本身的日期,而忽略其中包含的其它文件的修改日期。
  使用mod_expires提供的指令为文件设置一个明确的过期时间,并告诉浏览器和代理这个文件可以被缓冲。
From – http://ued.stuin.com/server/htm-ssi/

分类: 服务器管理 标签: , , , ,