问题

问题

最近,我换了一台新服务器,因为旧服务器坏了。我在那里安装了 wordpress,由 Apache2 和 Gentoo Linux 驱动。在移动时,我决定使用nginxDebian相反。我让我的 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)。如果您遇到类似问题,请随意使用和编辑我的脚本。

相关内容