存档

文章标签 ‘静态化’

支持IIS的cos-html-cache

2009年5月8日 6 条评论

  本篇文章将解决cos-html-cache在IIS下不能使用的问题,也是昨天发的文章的回答。
  通过分析cos-html-cache的代码后,发现主要问题是在IIS6.0下$_SERVER['REQUEST_URI']获取的URI是覆写前的,所以导致cos-html-cache在IIS6.0下不能使用。具体的分析可以看我昨天写的文章“cos-html-cache在IIS下不能使用的原因”。
  最初尝试从ISAPI Rewrite入手,但对这玩意儿不懂,没法只有从cos-html-cache的代码上想办法了。
  第一个思路是把获取的URI通过正则还原成覆写后的,再交给cos-html-cache插件的CreateHtmlFile处理,这样做实现上没问题,但太麻烦,判断是东西比较多。改动幅度可能也比较大。
  第二个思路,无意中发现的:),使用wordpress自带的get_permalink();函数(该函数位于wp-includes/link-template.php文件中),可以获得页面的URL地址。只要能在cos-html-cache中调用到这个函数就可以间接的获取到URI。好在wordpress在设计上的支持,可以在插件中调用wordpress自带函数。下面是获取理想中的URI的代码:

$url=get_permalink();//获取当前页面的地址
$url=preg_replace("'http:\/\/[^/]+([^# ]*)'",'$1',$url); //get /xx/xx/xx.xx

修改中还包括几个判断,具体的修改可以查看源文件(在文章末尾有下载地址);

另外在写ISAPI Rewrite规则时应该在转发规则前加上:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

上面的意思是判断请求的文件和目录是否存在,如果不存在那么将应用后面的规则。
一个简单的rewrite配置方案:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule /html/(\d+)\.html /index.php?p=$1

修改后的插件下载地址:Download
目前在wordpress 2.7.1下测试通过(注:首页的生成上有一点问题,需要根据个人需要修改代码)。如果遇到问题请给我留言。

分类: BLOG建设 标签: , ,

cos-html-cache在IIS下不能使用的原因

2009年5月7日 2 条评论

  本站所在的服务器目前是WIN2003+IIS6.0,一直想做页面的静态化,尝试了wp-super-cache和cos-html-cache等静态化插件都不行。他们的说明文档中似乎都没有提到在IIS下的使用,通过搜索发现这些插件多是针对APACHE设计的。
  通过分析cos-html-cache的代码发现一个导致IIS下无法使用的重要原因:
在Version: 2.7.3中的第102行

if( substr_count($_SERVER['REQUEST_URI'], '.htm') || ( SCRIPT_URI == CosSiteHome) )

这里判断URL是否符合要求。问题就出在这里,在IIS下使用URLRewrite后$_SERVER['REQUEST_URI']获得的将是页面的动态地址。
如:
当URLRewrite配置成
RewriteRule /html/(.+)\.html /index.php?p=$1
那么在访问/html/123.html时实际上是访问的/index.php?p=123.
而在IIS下$_SERVER['REQUEST_URI']获得的URI是/index.php?p=123,显然不符合要求,后面的创建静态页面的代码也就不会执行了。
问题找到了,如果能想办法获得复写后的URL,那么就可以正常使用cos-html-cache插件实现静态化。如何获得呢??

分类: BLOG建设 标签: ,