apache url /文件名包含特殊字符

apache 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 索引功能),我会看到该文件

在美国,没有合法的结婚登记,也没有合法的结婚登记.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

答案1

您可能需要将文件名的编码标准化为统一码 NFC表格。请参阅相关StackOverflow 问题 12643402您可以使用的一个工具是康维,应该是在 CentOS 中可用

答案2

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

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

相关内容