Wordpress一款专用windows环境IIS下的Isapi Rewrite组件

Wordpress实现静态自定义URL只需要在后台中:Settings->permalinks,然后设置成自己中意的URL就行了。但是前提是您的空间支持 rewrite,您的虚拟主机支持 .htaccess。Lamp,Wamp中只要开启加载mod_rewrite模块就行了。但是Wimp却不是这么简单的,它如果想实现rewrite功能只能借助于第三方的ISAPI组件。

我们最常用的Isapi Rewrite 官网:http://www.helicontech.com/isapi_rewrite/ 一个国外的组织专门为IIS写的ISAPI Rewrite组件,非常类似于Apache的mod_rewrite。有免费版与收费版!很多网友说实现WP在IIS中的rewrite功能只需要下载一个它的组件就OK了。我在本地测试了好一阵子,还是有很多问题,而且用它的比较麻烦,还要自己写rewrite规则!

推荐一个很少有人知道的WordPress专用ISAPI组件:

wp-url-rewriting.dll 下载地址:http://code.google.com/p/wp-url-rewriting-on-iis/downloads/list

这是位好心的牛人专门为工作于iiS中的WP写的ISAPI rewrite组件,用它您根本就不用写rewrite规则,您只需要将其加载到您的ISAPI中,然后进wp后台定义自己的permalinks即可。 假如你用的是虚拟主机的话,您可以联系您的空间商让其为您添加上这个组件。从此您的WP也可以完美rewrite了。

当我们定义好permalinks后,可能您会发现,我们点击中文标量的文章链接时说找不到网址。

这是因为:WP的编码为utf-8,而这篇文章的URL中Slug(上链接红色部分)编码为gbk。然后WP取得文章Slug后,通过它来查找文章就会找不到,因为编码不同。

更改方法:

wp-include/classes.php中(44-50行)

PHP代码
 

if ( isset($_SERVER['PATH_INFO']) )    
    $pathinfo = $_SERVER['PATH_INFO'];    
else   
    $pathinfo = ”;    
    $pathinfo_array = explode(“?”, $pathinfo);    
    $pathinfo = str_replace(“%”, “%25″, $pathinfo_array[0]);    
    $req_uri = $_SERVER['REQUEST_URI'];   

替换为下(转换$_SERVER['PATH_INFO']和$_SERVER['REQUEST_URI']的编码):

PHP代码
 

if ( isset($_SERVER['PATH_INFO']) )    
    $pathinfo = mb_convert_encoding($_SERVER['PATH_INFO'], “utf-8″, “GBK”);    
else   
    $pathinfo = ”;    
    $pathinfo_array = explode(“?”, $pathinfo);    
    $pathinfo = str_replace(“%”, “%25″, $pathinfo_array[0]);    
    $req_uri = mb_convert_encoding($_SERVER['REQUEST_URI'], “utf-8″, “GBK”);  

这个操作的意思就是:将Slug的编码由GBK转换为utf-8(您也可以用iconv,或是其它的函数来代替mb_convert_encoding)。”

Leave a comment

1 Comments.

  1. 博客之家 博客之家 2010-11-27 13:57:18

    我的博客为什么被屏蔽了?

Leave a Reply

Your email address will not be published. Required fields are marked *

*