技术宅改变世界 技术宅改变世界

typecho 特定环境下中文路径 bug

in Dev read (683) 文章转载请注明来源!

前段时间在google webmasters显示我网站有无数404页面,当时以为是刚从wp移过来,导致的,于是就提交已修复,没想到的是,过了几天后,404错误不但还有,而且还增加了几千个。。。
这时候就明显感觉到不对了,查看了页面,才发现当url有中文时,整个页面大多数的<a>标签所指向的地址都出现了错误。
只有一些特定环境下才会这样,我自己的环境是Centos7.3 nginx1.11.8(docker debian) php7.0-fpm(docker debian),跟踪php代码后,定位到了错误。

var/Typecho/Request.php文件,大概在477行

 $filename = (isset($_SERVER['SCRIPT_FILENAME'])) ? basename($_SERVER['SCRIPT_FILENAME']) : '';
if (isset($_SERVER['SCRIPT_NAME']) && basename($_SERVER['SCRIPT_NAME']) === $filename) {
$baseUrl = $_SERVER['SCRIPT_NAME'];
} elseif (isset($_SERVER['PHP_SELF']) && basename($_SERVER['PHP_SELF']) === $filename) {
$baseUrl = $_SERVER['PHP_SELF'];
} elseif (isset($_SERVER['ORIG_SCRIPT_NAME']) && basename($_SERVER['ORIG_SCRIPT_NAME']) === $filename) {
$baseUrl = $_SERVER['ORIG_SCRIPT_NAME']; // 1and1 shared hosting compatibility

个人修复方案

 $filename = (isset($_SERVER['SCRIPT_FILENAME'])) ? basename($_SERVER['SCRIPT_FILENAME']) : '';
if (isset($_SERVER['SCRIPT_NAME']) && basename($_SERVER['SCRIPT_NAME']) === $filename) {
$baseUrl = $_SERVER['SCRIPT_NAME'];
} elseif (isset($_SERVER['ORIG_SCRIPT_NAME']) && basename($_SERVER['ORIG_SCRIPT_NAME']) === $filename) {
$baseUrl = $_SERVER['ORIG_SCRIPT_NAME']; // 1and1 shared hosting compatibility
} elseif (isset($_SERVER['PHP_SELF']) && basename($_SERVER['PHP_SELF']) === $filename) {
typechobug标签
发表新评论
博客已萌萌哒运行
© 2020 • Powered by Typecho • Theme for yotu
PREVIOUS NEXT
雷姆
拉姆