具有特殊字符的Apacheurl/文件名

我有这个url:

http://domain.com/wp-content/uploads/2012/10/Hvilke-vilkår-følger-med-når-du-bestiller-nyt-bredbånd.png

如果我ftp / ssh或只是浏览到该文件夹​​(Apache索引function),我看到的文件

Hvilke-vilkår – 福尔杰-MED-NAR-DU-bestiller-NYT-bredbånd.png

如果我点击从apache索引的链接,我可以看到该文件,但是,如果我复制的URL,并尝试直接浏览它,我得到的错误:

在此服务器上找不到所请求的URL/wp-content/uploads/2012/10/Hvilke-vilk?r-følger-med-nÃ¥r-du-bestiller-nyt-bredbÃ?nd.png。

另外我的错误日志说:

文件不存在:/ wp-content / uploads / 2012/10 / Hvilke-vilk \ xc3 \ xa5r-f \ xc3 \ xb8lger-med-n \ xc3 \ xa5r-du-bestiller-nyt-bredb \ xc3 \ xa5nd。 PNG

您可能需要将文件名的编码规范化为Unicode NFCforms。 请参阅相关的StackOverflow问题12643402 。 你可以使用的一个工具是convmv ,它应该在CentOS中可用 。

RFC 3986§2.5build议首先用UTF-8字符编码表示非ASCII字符,然后该编码的每个字节应该进行百分比编码。 但是,旧的RFC 2396不推荐任何特定的字符编码。 因此,当您在地址栏中input包含非ASCII字符的地址时,浏览器的行为依赖于实现,特别是在您使用较旧的浏览器时。 例如,Windows上的Internet Explorer 7和OS X上的Safari 6不会显示您描述的问题。

您的网站似乎在LiteSpeed Web服务器上运行,这是Apache的专有克隆。 当LiteSpeed生成目录索引中链接的URL时,它不是对文件名中的非ASCII字符进行百分比编码,导致上述含糊不清的情况。 相比之下,Apache 2.2.16不会对UTF-8的文件名表示进行百分比编码,所以你的问题不会发生在Apache上。 也许更新版本的LiteSpeed可以解决你的问题。 指定IndexOptions Charset=UTF-8也可能有帮助。 由于LiteSpeed是专有的,我不能真正帮助你; 你必须联系他们的技术支持。 从服务器发出<A HREF="..."而不是<a href="..."的事实来看,我猜测LiteSpeed的目录索引生成代码并不是基于最新版本的Apache。