支持IIS的cos-html-cache
本篇文章将解决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下测试通过(注:首页的生成上有一点问题,需要根据个人需要修改代码)。如果遇到问题请给我留言。