2009-06-24

WordPress 中文 Tag 链接问题解决方案

19+

WordPress 中文 Tag 链接无法正常访问的问题想必多数使用 Windows+IIS 主机的朋友都有遇到,以前出现这个问题增加一条伪静态规则就可以解决,见:IIS 下实现 WordPress 伪静态,换了虚拟主机后不行了。找到一些可行的解决办法,摘录如下:

产生这个问题的主要原因是地址编码问题,及UTF-8和GBK之间转换的问题。IIS 对 URL 截取的时候取得的是 GBK 编码,但是 WordPress 中文都用的 UTF-8 编码,所以我们要对编码进行处理后再交给数据库进行查询。

一、转换编码解决 WordPress 中文 Tag 链接问题(推荐)

打开文件:wp-includes\classes.php

查找:

count(explode('404;',$_SERVER['QUERY_STRING']))>1 && ($_SERVER['PATH_INFO'] = $_SERVER['REQUEST_URI'] = substr($_SERVER['QUERY_STRING'], strpos($_SERVER['QUERY_STRING'], ':80')+3));

修改为:

count(explode('404;',$_SERVER['QUERY_STRING']))>1 && ($_SERVER['PATH_INFO'] = $_SERVER['REQUEST_URI'] = substr($_SERVER['QUERY_STRING'], strpos($_SERVER['QUERY_STRING'], ':80')+3));

再查找:

count(explode('404;',$_SERVER['QUERY_STRING']))>1 && ($_SERVER['PATH_INFO'] = $_SERVER['REQUEST_URI'] = substr($_SERVER['QUERY_STRING'], strpos($_SERVER['QUERY_STRING'], ':80')+3));

修改为:

count(explode('404;',$_SERVER['QUERY_STRING']))>1 && ($_SERVER['PATH_INFO'] = $_SERVER['REQUEST_URI'] = substr($_SERVER['QUERY_STRING'], strpos($_SERVER['QUERY_STRING'], ':80')+3));

保存,上传,问题解决。

二、禁止 Tag 伪静态解决 WordPress 中文 Tag 链接问题

打开文件:wp-includes/rewrite.php

查找:

count(explode('404;',$_SERVER['QUERY_STRING']))>1 && ($_SERVER['PATH_INFO'] = $_SERVER['REQUEST_URI'] = substr($_SERVER['QUERY_STRING'], strpos($_SERVER['QUERY_STRING'], ':80')+3));

修改这个函数中的:

count(explode('404;',$_SERVER['QUERY_STRING']))>1 && ($_SERVER['PATH_INFO'] = $_SERVER['REQUEST_URI'] = substr($_SERVER['QUERY_STRING'], strpos($_SERVER['QUERY_STRING'], ':80')+3));

为:

count(explode('404;',$_SERVER['QUERY_STRING']))>1 && ($_SERVER['PATH_INFO'] = $_SERVER['REQUEST_URI'] = substr($_SERVER['QUERY_STRING'], strpos($_SERVER['QUERY_STRING'], ':80')+3));

完成。

~~~

收藏一段preads的Win主机404实现Wordpress伪静态的代码:

在index.php里加入这样一段

count(explode('404;',$_SERVER['QUERY_STRING']))>1 && ($_SERVER['PATH_INFO'] = $_SERVER['REQUEST_URI'] = substr($_SERVER['QUERY_STRING'], strpos($_SERVER['QUERY_STRING'], ':80')+3));

控制面板中将404错误页面指向index.php,然后修改固定链接中的自定义链接。搞定!

本文有 19 篇评论 ↓↓

  1. 谢了,的确可以用!

  2. 我改过了还是不能使用...

    1. 哇,你用的GoDaddy主机,Win还是Linux?
      国内主机照上面的修改是可行的。GD是英文服务器系统,尚不明确,现在我用Typecho放在GoDaddy主机(Win)上也存在中文tag问题,提示404。
      正在找办法解决。

      1. Win 主机 IIS7

        1. 我也是Win+IIS7,共同关注这个问题,有解决办法我会更新在这里。

  3. 很感谢这篇文章,不过你的这篇“IIS 下实现 WordPress 伪静态”说的解决中文tag问题并不管用。
    这个应该也算是WordPress的一个bug了吧,开启静态后,当tag中含有非ANSI字符时,无法正常转码。

  4. 解决了,以后打死也不用win主机了。。。

    1. PHP用Linux主机的确会顺手得多。

  5. 为了兼容中文的 tags ,还需要多加载

  6. 开启静态后,当tag中含有非ANSI字符

  7. 用插件解决了这个问题:
    http://blog.bossma.cn/php/in-iis-wordpress-chinese-tag-permalinks-plugin/
    避免对wordpress核心程序的修改,方便以后升级及迁移。

  8. 新版的wordpress用不了啊

  9. 老杨太忙了,给你留言看看seo文章。

    我的博客www.klhm.net 咱们做个友情链接,带带我吧。收录上不来。我先给你做上了

  10. 同样问题,tag解决了,可分类目录打开后显示全部内容,该怎么解决呢?