WordPress在IIS ISAPI ReWrite下的URL规则

本帖由 juse2008-09-19 发布。版面名称:WordPress 综合交流

  1. juse

    juse 普通会员

    要说Wordpress中的完美工作环境,当然要属于Lamp平台,或是稍微逊色一点的Wamp平台;但是由于某此特殊原因,我们没有选择它们,而是选择了Windows+iis+MySql+Php,我把它统称为:Wimp平台。
    这次我要说的就是如何在Wimp平台中实现Wordpress的完美URL结构!
    例:http://www.phplamp.org/2008/06/wp-iis-isapi/ (本文的URL)
    用过Wordpress的应该都知道,实现这样的URL只需要在后台中:Settings->permalinks,然后设置成自己中意的URL就行了。但是前提是您的空间支持 rewrite || 您的虚拟主机支持 .htaccess。Lamp,Wamp中只要开启加载mod_rewrite模块就行了。但是Wimp却不是这么简单的,它如果想实现rewrite功能只能借助于第三方的ISAPI组件。

    如现在比较火的:http://www.helicontech.com/isapi_rewrite/ 这是一个国外的组织专门为IIS写的ISAPI Rewrite组件,非常类似于Apache的mod_rewrite。有免费版与收费版!很多网友说实现WP在IIS中的rewrite功能只需要下载一个它的组件就OK了。我在本地测试了好一阵子,没有成功,而且用它的比较麻烦,还要自己写rewrite规则!(没有成功可能是我没写正确规则,汗!)。最后我放弃了它……
    下面说一下本博客中(phplamp.org)用到的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后,可能您会发现,我们点击中文标量的文章链接时说找不到网址。
    例:http://www.phplamp.org/2008/06/php中的文章/
    这是因为:WP的编码为utf-8,而这篇文章的URL中Slug(上链接红色部分)编码为gbk。然后WP取得文章Slug后,通过它来查找文章就会找不到!因为编码不同呀。

    更改方法:

    wp-include/classes.php中(44-50行)
    代码:
    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']的编码):
    代码:
    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)。

    《-结束-》
     

    附件文件:

    已获得 chrisxavieradulthappy另外 5 人的点赞。
  2. fatefox

    fatefox 普通会员

    已获得 bigboy 的点赞。
  3. bigboy

    bigboy 封禁用户

    there are some conflicting plugins for this one. Check the plugin official page for the latest.
     
    已获得 knuckle 的点赞。
  4. mxhk

    mxhk 普通会员

    不错怎么上几天没注意呢现在不晚下来看看
     
  5. don-t

    don-t 正式会员

    Hi,
    Translator doesn't translate this text very well, so i hope i understood :)

    We buyed Helicons ISAPI and it works like charm. You can put code in .htaccess like no other IIS components can do.

    This is code that we used for Wordpress and it works like charm:

    代码:
    # Helicon ISAPI_Rewrite configuration file
    # Version 3.1.0.62
    
    
    RewriteEngine On
    RewriteBase /
    RewriteRule /?(.*) /index.php/$1 [I,U,O]
    RewriteRule /wp-(.*) /wp-$1 [L]
    
    
     
  6. babuci

    babuci 正式会员

    手动添加代码实现自动推荐! 是这个意思吧
     
    已获得 xavier 的点赞。
  7. susogeliy

    susogeliy 普通会员

    Thank you
     
正在加载...