wordpress中文标签出现404错误的解决办法

2015年7月17日01:51:33 发表评论 6,389 ℃

最近刚把wordpress博客从linux服务器更换到windows服务器,无意间发现中文标签点击报404错误(后来百度只有iis环境才会有这个问题),找不到页面,404错误对seo优化肯定是不又好的,所以赶紧想办法处理。刚开始以为数据没有转移完全,又重新转移了一次,但是故障依旧。没有办法,还是得需要解决啊!于是百度搜索“wordpress 中文标签404”,很多完美解决方案就唰唰的出来了。

首先找了一个方法马上通过FTP测试,发现神奇的中文标签可以用了。

方法如下:

1.在网站的根目录的wp-includes文件夹中找到“rewrite.php”这个文件。

2.备份一下“rewrite.php”,以防修改出错(改代码之前我们都最好备份一下原代码)。

3.打开“rewrite.php”文件中我们找到如下代码:

function get_tag_permastruct() {if (isset($this->tag_structure)) 
{return $this->tag_structure;}if (empty($this->permalink_structure)) {

//修改这句

$this->tag_structure = '';return false;}if 
(empty($this->tag_base))$this->tag_structure = $this->front . 
'tag/';else$this->tag_structure = $this->tag_base . 
'/';$this->tag_structure .= '%tag%';return $this->tag_structure;}

将其中的

" if (empty($this->permalink_structure)) { ”

修改为“ 

if (!empty($this->permalink_structure)) { "

注意这个里面只加了一个英文“!”号。

wordpress中文标签出现404错误的解决办法虽然中文tag标签没问题了,但是去访问内页的时候,发现伪静态失效了。没办法只能还原刚才修改的rewrite.php文件(记得修改任何文件之前都要备份),继续搜索其他方法……

终于功夫不负有心人,又找到一个完美方案,测试中文404真的没有报错了,方法如下:

1.打开wp-include文件夹,找到并打开编辑class-wp.php文件; 

2.查找代码: 

$pathinfo = $_SERVER['PATH_INFO'];

把这句代码替换成: 

$pathinfo = mb_convert_encoding($_SERVER['PATH_INFO'], "UTF-8", "GBK");

3.查找代码: 

$req_uri = $_SERVER['REQUEST_URI'];

把这句代码替换成: 

$req_uri = mb_convert_encoding($_SERVER['REQUEST_URI'], "UTF-8", "GBK");

由于自己较懒惰,方案里面提供了修改好的class-wp.php文件,于是我直接下载上传了,测试页面伪静态也没有问题,其他访问也没问题。

…………

第二天我去发布文章,上传图片的时候发现图片上传不了,以为是自己开的CDN加速的原因,于是乎用测试域名去测试发现还是无法上传,以为是插件冲突了,全部停止还是不行,再次怀疑自己转移数据没有转移完全,再去转了一次,重新转移测试图片上传成功,又去把之前修改的class-wp.php文件上传以后,去测试图片上传失败,还原此文件上传成功。

终于找到原因了,原来上面的方法还是有瑕疵,再去仔细一看教程,原来只适用wordpress3.5以下的版本。

心灰意冷,再去找方法,终于找到一个适用于wordpress4.1版本的方法,如下:

1.首先找到wordpress的wp-includes目录下-》class-wp.php文件,进行如下修改就可以解决在Windows系统下部分中文标签无法打开的情况。

2.wp-includes/class-wp.php 153 行:

$pathinfo = isset( $_SERVER['PATH_INFO'] ) ? $_SERVER['PATH_INFO'] : '';

修改为:

$pathinfo = isset( $_SERVER['PATH_INFO'] ) ? mb_convert_encoding($_SERVER['PATH_INFO'],'utf-8', 'GBK') : '';

3.wp-includes/class-wp.php 157 行:

list( $req_uri ) = explode( '?', $_SERVER['REQUEST_URI'] );

修改为:

list( $req_uri ) = explode( '?', mb_convert_encoding($_SERVER['REQUEST_URI'], 'utf-8','GBK') );

然后将class-wp.php文件保存并上传覆盖原文件。然后再全面测试伪静态、中文标题、图片上传都正常,此时终于完美解决。

在搜索的时候还找到了其他方法,未测试不知道是否可以解决,版本不同,方法不同,可以自行参考。

WordPress3.1之前版本,方法如下:

打开 WP-include/classes.php(3.1之前版本)或WP-include/class-wp.php(3.1+之后版本,下文称新版)找到第154行(新版为142行),把:

$pathinfo = $_SERVER['PATH_INFO';

替换为:

$pathinfo = mb_convert_encoding($_SERVER['PATH_INFO'], 'UTF-8', 'GBK');

找到第159行(新版为147行),把:

$req_uri = $_SERVER['REQUEST_URI';

替换为:

$req_uri = mb_convert_encoding($_SERVER['REQUEST_URI'], 'UTF-8', 'GBK');

还有方法如下:

登录wordpress后台,在文章标签里。给每一个含中文的Tags标签,加上一个标签别名。“别名” 是URL友好的另外一个名称。它通常为小写并且只能包含字母,数字和连字符。

对于上百个以上中文Tags标签的博客,此种方法工作量巨大。

还有说是ISAPI_Rewrite伪静态的规则没有写好才导致找不到网页文件的。其实就是更改一下规则就可以了:之前的tag伪静态的规则

RewriteRule /tag/(.*)$ /index\.php\?tag=$1

更改后的规则

RewriteRule /tag/(.*)/$ /index\.php\?tag=$1

经成都SEO博主测试无效果。

【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: