Apache 使用不同的 URL 编码提供文件

Apache 使用不同的 URL 编码提供文件

当我尝试在临时服务器上加载文件图像时,出现错误,似乎与编码有关。当我访问以下 URL 时:

http://example.com/sites/default/files/2016-12/Articulaci%C3%B3n.jpg

Apache 抛出 404(未找到)错误,文件存在且名称为“Articulación.jpg”

但如果我尝试使用以下 URL 加载图像文件,则有效:

http://example.com/sites/default/files/2016-12/Articulacio%CC%81n.jpg

在我的本地服务器(开发)上,两个 URL 都可以使用,我可以看到预期的图像。

我的开发服务器是 MAMP 的安装:

  • MacOS Sierra 10.12.3
  • Drupal 8.2.1
  • PHP 5.5.14
  • Apache 2.2.26(Unix)
  • PostgreSQL 9.4.4

我的暂存服务器是 Centos 服务器:

  • Centos 7
  • Drupal 8.2.1
  • PHP 5.6.26
  • Apache 2.4.6(CentOS)
  • PostgreSQL 9.2.15

我认为这是 apache 的一种 URL 映射或编码后备行为,也许我的暂存服务器上的模块、扩展或服务器配置出现故障/丢失。

答案1

URL 有两种不同的 UTF-8 字符编码ó。第一个是%CC%81,第二个是%C3%B3。您需要找出每个服务器上 URL 不同的原因,并确保它们是相同的。

因此,您的开发服务器中的某些设置会导致它以不同的方式对 URL 进行编码。这可能与 PHP 版本差异或 PHP 中使用的字符集/编码有关。

另一种可能性是 Mac OS 对文件名的要求不太严格,可以使用不同的编码来匹配同一个文件。

相关内容