最近,我换了一台新服务器,因为旧服务器坏了。我在那里安装了 wordpress,由 Apache2 和 Gentoo Linux 驱动。在移动时,我决定使用nginx和Debian相反。我让我的 wordpress 重新工作,一切都会很好,如果不是因为一个小...
问题
文件名中包含特殊字符的图像无法加载,我得到404 未找到。例如,当请求
http://my_site/wp-content/uploads/2013/05/Zajęcia-dla-dorosłych-z-bollywood-dance.jpg
WordPress 回应
You tried going to http://my_site/wp-content/uploads/2013/05/Zaj%C4%99cia-dla-doros%C5%82ych-z-bollywood-dance.jpg, and it doesn't exist.
我玩了一会儿终端,发现服务器上的图像文件名与 wordpress 请求的文件名略有不同。尽管它们看起来相同,但特殊字符序列的编码方式不同。例如,当我Zajęcia-dla-dorosłych-z-bollywood-dance.jpg
从终端复制文件名时,它被编码为Zajęcia-dla-dorosłych-z-bollywood-dance.jpg
。另一方面,wordpress 正在寻找Zajęcia-dla-dorosłych-z-bollywood-dance.jpg
不存在的文件,当然。
两个系统(旧的 Gentoo 和当前的 Debian)都设置为使用基于 UTF-8 的语言环境。
怎么解决?
我认为可能的原因有以下三个:
- Debian 在文件名中存储特殊字符的方式与 Gentoo 不同
- 我的新 mysql 存储特殊字符的方式与旧 mysql 不同
- nginx 处理特殊字符的方式与 Apache 不同
有什么建议可以证明这些假设是错误的,并最终解决问题?
答案1
好的,我通过使用以下方法更正文件名解决了该问题脚本。我认为当我在系统之间复制文件时,特殊字符的编码在某些时候被破坏了(Gentoo => Mac OS X => Debian)。如果您遇到类似问题,请随意使用和编辑我的脚本。