问题描述
解决方案
方案一
简单粗暴,直接将文章地址格式修改为纯数字编码或其他不含中文的格式,即尽量避免出现中文地址
方案二
显示上述方法简单操作,但是治标不治本,并没有真正解决问题
下面先介绍真正的解决方法
找到wordpress目录下的wp-includes目录,编辑其中的class-wp.php文件(wordpress/wp-includes/class-wp.php)
(3.1版本前为wordpress目录下的wp-include/classes.php文件)
按照如下方法修改:
wp-includes/class-wp.php (WordPress4.8.1在178行):
$pathinfo = isset( $_SERVER['PATH_INFO'] ) ? $_SERVER['PATH_INFO'] : '';
修改为
$pathinfo = isset( $_SERVER['PATH_INFO'] ) ? mb_convert_encoding($_SERVER['PATH_INFO'], 'utf-8', 'GBK') : '';
wp-includes/class-wp.php (WordPress4.8.1在182行):
list( $req_uri ) = explode( '?', $_SERVER['REQUEST_URI'] );
修改为
list( $req_uri ) = explode( '?', mb_convert_encoding($_SERVER['REQUEST_URI'], 'utf-8', 'GBK') );
注:目前最新版本wordpress的代码行数有所变化,但大致在170行附近,可通过搜索“SERVER['PATH_INFO']”来查找定位,两处需修改的位置距离不远
修改前后总体对比:
修改前总体为:
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'];
修改后总体为:
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');
本质修改是将两处的
$_SERVER['PATH_INFO']
修改为
mb_convert_encoding($_SERVER['REQUEST_URI'], 'utf-8', 'GBK')
也就是原来是直接返回地址,现在是通过函数将地址进行转码后返回
实际打开的地址应为:
https://www.tianziweb.net/2020/01/23/%e5%be%ae%e8%bd%afwindows-10%e5%bf%ab%e9%80%9f%e9%a2%84%e8%a7%88%e7%89%8819546%e6%8e%a8%e9%80%81/
[/mark_a]
注:可能需要打开Apache重写功能(或其他相应使用的服务器软件重写功能),并给与wordpress目录重写权限,若之前未打开可能依然无法访问
继续阅读
- 我的微信
- 这是我的微信扫一扫
- 我的微信公众号
- 我的微信公众号扫一扫
评论